前面讨论了FilterChainProxy对象,过滤器DelegatingFilterProxy的拦截器逻辑就是根据他的逻辑来完成的.接下来需要关注的是他的初始化.为了给FilterChianProxy对象加入自定义的初始化,Spring Security提供了SecurityConfigurer接口,通过它就可以实现对Spring Security的配置.只是有了这个接口还不太方便,因为他只是能够提供接口定义的功能,为了更加方便,Spring对Web工程还提供了专门的接口WebSecurityConfigurer,并且在这个接口的定义之上还提供了一个抽象类WebSecurityConfigurerAdapter.开发者通过继承他就能得到Spring Security默认的安全功能.也可以通过他覆盖他提供的方法,来自定义自己的安全拦截方案.这里需要研究WebSecurityConfigurerAdater中默认存在的三个方法,他们是
/**
* 用来配置用户签名服务,主要是user-details机制,你还可以给予用户赋予角色
* @param auth 签名管理器构造器,用于用户具体权限控制
* @throws Exception
*/
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
super.configure(auth);
}
/**
* 用来配置Filter链
* @param web Spring Web Security对象
* @throws Exception
*/
public void configure(WebSecurity web) throws Exception {
super.configure(web);
}
/**
* 用来配置拦截保护的请求,比如什么请求放行,什么请求需要验证.
* @param http
* @throws Exception
*/
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
}
对于使用WebSecurity参数的方法主要是配置Filter链的内容,可以配置Filter链忽略那些内容.WebSecurityConfigurerAdapter提供的是空实现,也就是没有任何的配置.而对于AuthenticationManagerBuilder参数的方法,则是定义用户,密码和角色,在默认的情况下Spring不会为你创建任何的用户和密码,也就是有登录页面但是没有登录用户.对于HttpSecurity参数的方法,则是指定用户和角色与对应的URL的访问权限,也就是开发者通过覆盖这个方法指定来指定用户或者角色的访问权限.在WebSecurityConfigurerAdapter提供的验证方式满足下满足用户验证或者http基本验证的任何请求,Spring Security都会放行.