spring security学习笔记1
来源:互联网 发布:淘宝网通识课代刷 编辑:程序博客网 时间:2024/06/14 13:39
本文来自极客学院spring security:http://wiki.jikexueyuan.com/index.php/project/spring-security/log-in.html.
初识 Spring Security
Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。
初体验
需要一个专门的配置文件spring-security.xml,并引入spring security的命名空间。对于java文件的配置相应的在类中进行。<beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"></beans>
Spring Security 命名空间的引入可以简化我们的开发,它涵盖了大部分 Spring Security 常用的功能。它的设计是基于框架内大范围的依赖的,可以被划分为以下几块。
- Web/Http 安全:这是最复杂的部分。通过建立 filter 和相关的 service bean 来实现框架的认证机制。当访问受保护的 URL 时会将用户引入登录界面或者是错误提示界面。
- 业务对象或者方法的安全:控制方法访问权限的。
- AuthenticationManager:处理来自于框架其他部分的认证请求。
- AccessDecisionManager:为 Web 或方法的安全提供访问决策。会注册一个默认的,但是我们也可以通过普通 bean 注册的方式使用自定义的 AccessDecisionManager。
- AuthenticationProvider:AuthenticationManager 是通过它来认证用户的。
- UserDetailsService:跟 AuthenticationProvider 关系密切,用来获取用户信息的。
<security:http auto-config="true"> <security:intercept-url pattern="/**" access="ROLE_USER"/> </security:http>
如上定义中,intercept-url 定义了一个权限控制的规则。pattern 属性表示我们将对哪些 url 进行权限控制,其也可以是一个正则表达式,如上的写法表示我们将对所有的 URL 进行权限控制;access 属性表示在请求对应的 URL 时需要什么权限,默认配置时它应该是一个以逗号分隔的角色列表,请求的用户只需拥有其中的一个角色就能成功访问对应的 URL。这里的“ROLE_USER” 表示请求的用户应当具有 ROLEUSER 角色。“ROLE” 前缀是一个提示 Spring 使用基于角色的检查的标记。
有了权限控制的规则了后,接下来我们需要定义一个 AuthenticationManager 用于认证。我们先来看如下定义:
<security:authentication-manager> <security:authentication-provider> <security:user-service> <security:user name="user" password="user" authorities="ROLE_USER"/> <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN"/> </security:user-service> </security:authentication-provider> </security:authentication-manager>authentication-manager 元素指定了一个 AuthenticationManager,其需要一个AuthenticationProvider(对应 authentication-provider 元素)来进行真正的认证,默认情况下 authentication-provider 对应一个 DaoAuthenticationProvider,其需要 UserDetailsService(对应 user-service 元素)来获取用户信息 UserDetails(对应 user 元素)。这里我们只是简单的使用 user 元素来定义用户,而实际应用中这些信息通常都是需要从数据库等地方获取的,这个将放到后续再讲。我们可以看到通过 user 元素我们可以指定 user 对应的用户名、密码和拥有的权限。user-service 还支持通过 properties 文件来指定用户信息,如:
<security:user-service properties="/WEB-INF/config/users.properties"/>其中属性文件应遵循如下格式:
username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]所以,对应上面的配置文件,我们的 users.properties 文件的内容应该如下所示:
#username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]user=user,ROLE_USERadmin=admin,ROLE_USER,ROLE_ADMIN至此,我们的 Spring Security 配置文件的配置就完成了。完整配置文件将如下所示。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <security:http auto-config="true"> <security:intercept-url pattern="/**" access="ROLE_USER"/> </security:http> <security:authentication-manager> <security:authentication-provider> <security:user-service> <security:user name="user" password="user" authorities="ROLE_USER"/> <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN"/> </security:user-service> </security:authentication-provider> </security:authentication-manager></beans>之后就是在web.xml文件中配置spring security的代理类DelegatingFilterProxy以及配置文件的加载了,具体如下:
<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/applicationContext.xml,/WEB-INF/config/spring-security.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>因为我们的 spring-security.xml 文件中配置好了所有的请求都需要 “ROLE_USER” 权限,所以当我们在请求主页的时候,Spring Security 发现我们还没有登录,Spring 会引导我们到登录界面。使用正确的用户名和密码(如上面配置的 user/user 或 admin/admin)登录后,如果符合对应的权限我们就可以访问主页了,否则将出现 403(禁止访问)界面。
可能你会奇怪,我们没有建立上面的登录页面,为什么 Spring Security 会跳到上面的登录页面呢?这是我们设置 http 的 auto-config=”true” 时 Spring Security 自动为我们生成的。
当指定 http 元素的 auto-config=”true” 时,就相当于如下内容的简写。
<security:http> <security:form-login/> <security:http-basic/> <security:logout/> </security:http>这些元素负责建立表单登录、基本的认证和登出处理。它们都可以通过指定对应的属性来改变它们的行为。
- spring security学习笔记1
- spring security学习笔记
- Spring Security学习笔记
- spring security学习笔记
- Spring Security学习笔记
- Spring Security学习笔记
- Spring Security学习笔记
- spring security 学习笔记
- Spring Security学习笔记
- Spring security+rememberme学习笔记(1)
- <学习笔记>Spring Security 学习
- Spring Security 2.0学习笔记
- Spring security 学习使用笔记
- spring-security学习笔记--配置文件
- spring-security学习笔记--配置文件
- Spring security 3学习笔记
- spring-security学习笔记--配置文件
- spring-security学习笔记--配置文件
- 合理使用nginxhash策略做更有意义的负载均衡
- linux下安装录制视频软件Simple Screen Recorder
- 《自控力》书摘
- LeetCode 21. Merge Two Sorted Lists
- 矩阵相乘
- spring security学习笔记1
- tslib移植全过程,可能遇到的所有问题,错误
- vim 操作
- 【vijos】【树形dp】佳佳的魔法药水
- Android横竖屏切换小记
- git 取消commit
- 【Oracle】事务
- 笔试经常遇到的选择排序、冒泡排序和二分法查找
- 实现sqrt(x)