1. 作者:SingleXu
  2. 链接:https://www.jianshu.com/p/8212a559d633
  3. 来源:简书
  4. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. 简介
  2. Spring SecuritySpring生态系统中的一员,提供安全机制的(软件的安全、程序的安全,非硬件安全)
  3.  
  4. Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。
  5.  
  6. 就帮我们解决两个问题
  7.  
  8. 认证:验证用户名和密码是否合法(是否系统中用户),这是第一关;
  9. 授权:是系统用户不代表你能使用某些功能,因为你可能没有权限,这是第二关;
  10. Spring Security底层使用的是过滤器,针对url进行的拦截,对应到java中也就是类; 因此被称为粗粒度授权验证,就是验证url,你当前用户有没有这个url的权限。
  11.  
  12. 快速入门
  13. 省略父工程创建步骤,见:https://www.jianshu.com/p/8853bc384758
  14.  
  15. 2.1 创建web项目
  16. .png
  17. .png
  18. 2.2 导入依赖
  19. 图片.png
  20. <?xml version="1.0" encoding="UTF-8"?>
  21. <project xmlns="http://maven.apache.org/POM/4.0.0"
  22. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  23. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  24. <parent>
  25. <artifactId>mytest_parent</artifactId>
  26. <groupId>com.mytest</groupId>
  27. <version>1.0-SNAPSHOT</version>
  28. <relativePath>../mytest_parent/pom.xml</relativePath>
  29. </parent>
  30. <modelVersion>4.0.</modelVersion>
  31.  
  32. <artifactId>spring_security_01</artifactId>
  33.  
  34. <packaging>war</packaging>
  35. <build>
  36. <plugins>
  37. <!-- 配置Tomcat插件 -->
  38. <plugin>
  39. <groupId>org.apache.tomcat.maven</groupId>
  40. <artifactId>tomcat7-maven-plugin</artifactId>
  41. <version>2.2</version>
  42. <configuration>
  43. <port></port>
  44. <path>/</path>
  45. </configuration>
  46. </plugin>
  47. </plugins>
  48. </build>
  49.  
  50. <dependencies>
  51.  
  52. <!-- Spring -->
  53. <dependency>
  54. <groupId>org.springframework</groupId>
  55. <artifactId>spring-webmvc</artifactId>
  56. </dependency>
  57. <dependency>
  58. <groupId>org.springframework</groupId>
  59. <artifactId>spring-jdbc</artifactId>
  60. </dependency>
  61. <dependency>
  62. <groupId>org.springframework</groupId>
  63. <artifactId>spring-aspects</artifactId>
  64. </dependency>
  65. <dependency>
  66. <groupId>org.springframework</groupId>
  67. <artifactId>spring-test</artifactId>
  68. </dependency>
  69. <dependency>
  70. <groupId>org.springframework.security</groupId>
  71. <artifactId>spring-security-web</artifactId>
  72. </dependency>
  73. <dependency>
  74. <groupId>org.springframework.security</groupId>
  75. <artifactId>spring-security-config</artifactId>
  76. </dependency>
  77.  
  78. <!-- JSP相关 -->
  79. <dependency>
  80. <groupId>jstl</groupId>
  81. <artifactId>jstl</artifactId>
  82. </dependency>
  83. <dependency>
  84. <groupId>javax.servlet</groupId>
  85. <artifactId>servlet-api</artifactId>
  86. <scope>provided</scope>
  87. </dependency>
  88. <dependency>
  89. <groupId>javax.servlet</groupId>
  90. <artifactId>jsp-api</artifactId>
  91. <scope>provided</scope>
  92. </dependency>
  93.  
  94. </dependencies>
  95.  
  96. </project>
  97. 2.3 配置applicationContext_security.xml, 配置认证和授权信息
  98. 图片.png
  99. <?xml version="1.0" encoding="UTF-8"?>
  100. <beans xmlns="http://www.springframework.org/schema/beans"
  101. xmlns:security="http://www.springframework.org/schema/security"
  102. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  103. xsi:schemaLocation="
  104. http://www.springframework.org/schema/beans
  105. http://www.springframework.org/schema/beans/spring-beans.xsd
  106. http://www.springframework.org/schema/security
  107. http://www.springframework.org/schema/security/spring-security.xsd
  108. ">
  109. <!--
  110. 配置拦截的规则
  111. auto-config="使用SpringSecurity自带的页面"
  112. use-expressions="是否使用spel表达式",如果使用表达式:hasRole('ROLE_USER')
  113. -->
  114. <security:http auto-config="true" use-expressions="false">
  115. <!--intercept-url 表示拦截页面
  116. /* 表示的是该目录下的资源,只包括本级目录不包括下级目录
  117. /** 表示的是该目录以及该目录下所有级别子目录的资源
  118. 配置拦截的请求地址,任何请求地址都必须有ROLE_USER的权限 -->
  119. <security:intercept-url pattern="/**" access="ROLE_USER"/>
  120. </security:http>
  121.  
  122. <!-- 配置认证信息 -->
  123. <security:authentication-manager>
  124. <security:authentication-provider>
  125. <security:user-service>
  126. <!--noop是一个标识,表示密码不能明文,密码往往会有很多其他方式,这里默认编码就是不编码-->
  127. <security:user name="admin" password="{noop}admin" authorities="ROLE_USER"/>
  128. </security:user-service>
  129. </security:authentication-provider>
  130. </security:authentication-manager>
  131. </beans>
  132. 2.4 配置过滤器
  133. (这里的web.xml和index.jsp文件是手动创建的,名称路径一致即可)
  134.  
  135. 图片.png
  136. <!DOCTYPE web-app PUBLIC
  137. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  138. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  139.  
  140. <web-app>
  141. <display-name>Archetype Created Web Application</display-name>
  142. <!--Spring监听器指定配置文件位置-->
  143. <context-param>
  144. <param-name>contextConfigLocation</param-name>
  145. <param-value>classpath:spring/applicationContext_security.xml</param-value>
  146. </context-param>
  147.  
  148. <!--配置委派代理过滤器-->
  149. <filter>
  150. <filter-name>springSecurityFilterChain</filter-name>
  151. <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  152. </filter>
  153. <filter-mapping>
  154. <filter-name>springSecurityFilterChain</filter-name>
  155. <url-pattern>/*</url-pattern>
  156. </filter-mapping>
  157.  
  158. <listener>
  159. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  160. </listener>
  161.  
  162. <welcome-file-list>
  163. <welcome-file>index.jsp</welcome-file>
  164. </welcome-file-list>
  165. </web-app>
  166. 2.5测试
  167. 打开tomcat插件测试
  168. 图片.png
  169. 访问localhost/index.jsp页面,如果当前用户没有登录认证的话,则跳转到SpringSecurity的内置登录页面
  170.  
  171. 图片.png
  172. 输入配置文件中配置好的账户名admin密码admin,会出现如下404
  173.  
  174. 图片.png
  175.  
  176. 配置文件中增加,对网页缩略图的不拦截后,重启tomcat
  177.  
  178. 图片.png
  179. <security:http pattern="/favicon.ico" security="none"/>
  180. 即可访问到index.jsp页面
  181.  
  182. 图片.png
  183. 3 配置自定义的登录页面
  184. 图片.png
  185. 3.1 登录页面login.jsp
  186. <%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java"%>
  187. <html>
  188. <head>
  189. <title>xxx系统登录页</title>
  190.  
  191. <style>
  192. div{
  193. width:300px;
  194. height:100px;
  195. position: absolute;
  196. top:50%;
  197. left:50%;
  198. margin-top:-50px;
  199. margin-left:-150px;
  200. }
  201. </style>
  202. </head>
  203. <body>
  204. <div>
  205. <form method="post" action="${pageContext.request.contextPath}/login">
  206. <table>
  207. <tr>
  208. <td>用户名</td>
  209. <td><input type="text" name="username"/></td>
  210. </tr>
  211. <tr>
  212. <td>密码</td>
  213. <td><input type="password" name="password"/></td>
  214. </tr>
  215. <tr>
  216. <td></td>
  217. <td><input type="submit"/></td>
  218. </tr>
  219. </table>
  220. </form>
  221. </div>
  222.  
  223. </body>
  224. </html>
  225. 3.2 成功页面: success.jsp
  226. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  227. <html>
  228. <head>
  229. <title>Title</title>
  230. </head>
  231. <body>
  232. 登录成功,欢迎!
  233. </body>
  234. </html>
  235. 3.3 失败页面: error.jsp
  236. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  237. <html>
  238. <head>
  239. <title>Title</title>
  240. </head>
  241. <body>
  242. 登录失败!!!
  243. </body>
  244. </html>
  245. 3.4 配置
  246. 图片.png
  247.  
  248. 图片.png
  249.  
  250. 图片.png
  251. <?xml version="1.0" encoding="UTF-8"?>
  252. <beans xmlns="http://www.springframework.org/schema/beans"
  253. xmlns:security="http://www.springframework.org/schema/security"
  254. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  255. xsi:schemaLocation="
  256. http://www.springframework.org/schema/beans
  257. http://www.springframework.org/schema/beans/spring-beans.xsd
  258. http://www.springframework.org/schema/security
  259. http://www.springframework.org/schema/security/spring-security.xsd
  260. ">
  261.  
  262. <!-- 把登陆页面不拦截 -->
  263. <security:http pattern="/login.jsp" security="none"/>
  264. <security:http pattern="/error.jsp" security="none"/>
  265. <security:http pattern="/favicon.ico" security="none"/>
  266.  
  267. <!--===================授权验证: 验证角色的访问权限 ===================-->
  268. <!--
  269. 配置拦截的规则
  270. auto-config="使用SpringSecurity自带的页面"
  271. use-expressions="是否使用spel表达式",如果使用表达式:hasRole('ROLE_USER')
  272. -->
  273. <security:http auto-config="true" use-expressions="false">
  274. <!-- 配置拦截的请求地址,任何请求地址都必须有ROLE_USER的权限 -->
  275. <security:intercept-url pattern="/**" access="ROLE_USER"/>
  276. <!--配置自定义登录相关页面-->
  277. <security:form-login
  278. login-page="/login.jsp"
  279. login-processing-url="/login"
  280. default-target-url="/success.jsp"
  281. authentication-failure-url="/error.jsp"
  282. username-parameter="username"
  283. password-parameter="password"
  284. />
  285. <!--关闭跨站请求伪造-->
  286. <security:csrf disabled="true"/>
  287. </security:http>
  288.  
  289. <!--=========================授权认证: 校验用户名和密码的合法性====================-->
  290. <!-- 配置认证信息 -->
  291. <security:authentication-manager>
  292. <security:authentication-provider>
  293. <security:user-service>
  294. <!--noop是一个标识,表示密码不能明文,密码往往会有很多其他方式,这里默认编码就是不编码-->
  295. <security:user name="admin" password="{noop}admin" authorities="ROLE_USER"/>
  296. </security:user-service>
  297. </security:authentication-provider>
  298. </security:authentication-manager>
  299. </beans>
  300. 3.5 测试1: 访问登录页面(localhost/login.jsp) 且 用户名和密码正确
  301. http://localhost/login.jsp
  302. 图片.png
  303.  
  304. 图片.png
  305. 3.6 测试2:访问localhost/index.jsp, 用户名和密码正确:
  306. 关闭浏览器重新访问
  307. http://localhost/index.jsp
  308.  
  309. 图片.png
  310.  
  311. 图片.png
  312. 3.7 测试3: 访问index.jsp, 用户名或密码错误
  313. http://localhost/index.jsp
  314.  
  315. 图片.png
  316. 图片.png
  317. 6人点赞
  318. 日记本
  319. "
  320.  
  321. 作者:SingleXu
  322. 链接:https://www.jianshu.com/p/8212a559d633
  323. 来源:简书
  324. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

SpringSecurity快速入门的更多相关文章

  1. spring boot入门教程——Spring Boot快速入门指南

    Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将使创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运 ...

  2. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  3. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  4. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  5. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  8. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  9. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. ThreadPoolExecutor源码分析一

           在线程池出现之前,每次需要使用线程,都得创建一个线程.但是,在java的运行环境中,创建一个线程是非常耗费资源和时间的.是否可以把线程重复利用,减少线程的创建次数.基于此,java1.5 ...

  2. Java中的super的使用

  3. Rendering in UE4(Gnomon School UE4 大师课笔记)

    Rendering in UE4 Presented at the Gnomon School of VFX in January 2018, part two of the class offers ...

  4. C# ado.net 使用task和await(四)

    class Program { private static string constr = "server=.;database=northwnd;integrated security= ...

  5. Codeforces Round #455 (Div. 2) 909E. Coprocessor

    题 OvO http://codeforces.com/contest/909/problem/E CF455 div2 E CF 909E 解 类似于拓扑排序地进行贪心, 对于 Ei=0 并且入度为 ...

  6. crypot.js 生成hash256, 在IE下的卡顿问题。

    项目需求: 上传大文件,调用crypto.js生成hash256码. 直接上传大文件,IE会直接崩溃. 于是利用file.slice分片检测.但是浏览器会出现卡顿问题.开始以为是内存泄漏.但看服务器进 ...

  7. Spring中,请求参数处理

    Spring中,Controller里,获取请求数据有多种情况 在使用@RequestParam的方式获取请求中的参数时, 如果没有设置required这个属性,或者主动设置为true,则意味着这个参 ...

  8. OI程序常见的设计陷阱

    宏定义的问题 有时候为了方便,我会大量使用宏定义.但是最近我发现下面这两个宏定义老是出问题: #define SET(x,a) memset(x,a,sizeof(x)) inline void wo ...

  9. [Shell]常用语法

    赋值 FILE=$1 //=两边不能有空格 echo $FILE 逻辑判断 表达式 .if [ expression ]; then ... fi //[]两边必须有空格 . if [[ expres ...

  10. BZOJ 2402 陶陶的难题II (树链剖分、线段树、凸包、分数规划)

    毒瘤,毒瘤,毒瘤-- \(30000\)这个数据范围,看上去就是要搞事的啊... 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2402 ...