Spring Security结构
Spring Security3.2分为11个模块,如下表所示:
模块 | 描述 |
---|---|
ACL | 支持通过访问控制列表(access control list)为域对象提供安全性 |
切面 | 当使用Spring security注解时,会使用基于AspectJ的切面,而不是标准的SpringAOP |
CAS客户端 | 提供与Jasig的中心认证服务(Central Authentication Service)进行集成的功能 |
配置Configuration | 包含通过XML和JAVA配置SpringSecurity的功能支持 |
核心core | 基本库 |
加密Cryptograph | 提供加密和密码编码功能 |
LDAP | 支持基于LDAP进行认证 |
OpenId | 支持使用OpenId镜像集中式认证 |
Remoting | 提供了对Spring Remoting 的支持 |
标签库Tag Lib | Jsp标签库 |
Web | 提供基于Filter的web安全性支持 |
编写简单的安全性配置
Spring Security3.2引入了新的Java配置方案,完全不在需要通过XML来配置安全性功能。如下,展现了Spring Security最简单的Java配置:
1 | package spitter.config; |
@EnableWebSecurity注解将会启动Web安全功能,但它本身并没有什么功能。Spring Security必须配置在一个实现了WebSecurityConfigurer的bean中,或者扩展WebSecurityConfigurerAdapter,扩展该类是最简单的配置方法。
这样做有以下几点好处:
- a、该注解配置了一个Spring MVC参数解析器(argument
resolver),这样处理器方法能够通过带有@AuthenticationPrincipal注解的参数获得认证用户的principal(或username)。 - b、它配置了一个bean,在使用Spring表单绑定标签库来定义表单时,这个bean会自动添加一个隐藏的跨站请求伪造token输入域。
我们可以通过重载WebSecurityConfigurerAdapter中的一个或多个方法来指定Web安全的细节。例如WebSecurityConfigurerAdapter的三个configure()方法。详情如下表:
方法 | 描述 |
---|---|
configure(WebSecurity) | 配置Filter链 |
configure(HttpSecurity) | 配置如何通过拦截器保护请求 |
configure(AuthenticationManagerBuilder) | 配置userDetail服务 |
上面的程序清单中没有重写任何一个configure()方法,所以应用现在是被严格锁定的,没有任何人能够进入系统。为了让Spring Security满足我们应用的需求,还需要再添加一点配置。具体来讲,我们需要:
- a、配置用户存储
- b、指定哪些请求需要认证,哪些请求不需要认证,以及需要的权限。
- c、提供一个自定义的登录页面,替代原来简单的默认登录页