默认继承了WebSecurityConfigurerAdapter之后,再加上几行代码,我们就能实现以下的功能:
- 1、要求用户在进入你的应用的任何URL之前都进行验证
- 2、创建一个用户名是“user”,密码是“password”,角色是“ROLE_USER”的用户
- 3、启用HTTP Basic和基于表单的验证
- 4、Spring Security将会自动生成一个登陆页面和登出成功页面
这样他就提供基于web的security, 安全服务配置URL强制拦截保护服务,可以配置哪些路径不需要保护,哪些需要保护,它与ResourceServerConfigurerAdapter区别在于:
-
WebSecurityConfigurerAdapter是默认情况下spring security的http配置,
ResourceServerConfigurerAdapter是默认情况下spring security oauth2的http配置 -
ResourceServerConfigurerAdapter被配置为不同的端点(参见antMatchers),而WebSecurityConfigurerAdapter不是。
-
RealServServer配置适配器使用一个特殊的过滤器来检查请求中的承载令牌,以便通过OAuth2对请求进行认证。而WebSecurityConfigurerAdapter适配器用于通过会话对用户进行身份验证(如表单登录)
WebSecurityConfigurerAdapter部分源码如下:
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
...
}
public void configure(WebSecurity web) throws Exception {
}
protected void configure(HttpSecurity http) throws Exception {
...
}
...
}
ResourceServerConfigurerAdapter部分源码如下:
public class ResourceServerConfigurerAdapter implements ResourceServerConfigurer {
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
}
}
在ResourceServerProperties中,定义了它的order默认值为SecurityProperties.ACCESS_OVERRIDE_ORDER - 1;,是大于100的,即WebSecurityConfigurerAdapter的配置的拦截要优先于ResourceServerConfigurerAdapter,优先级高的http配置是可以覆盖优先级低的配置的。
某些情况下如果需要ResourceServerConfigurerAdapter的拦截优先于WebSecurityConfigurerAdapter需要在配置文件中添加
security.oauth2.resource.filter-order=99
或者重写WebSecurityConfigurerAdapter的Order配置,如下:
@Configuration
@EnableWebSecurity
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
...
}
网友评论