spring security 提供大量得过滤器对系统资源进行保护
以下介绍主要过滤器以及顺序
一、WebAsyncManagerIntegrationFilter
将Security上下文与Spring Web中用于处理异步请求映射的 WebAsyncManager 进行集成
二、SecurityContextPersistenceFilter
在每次请求处理之前将该请求相关的安全上下文信息加载到SecurityContextHolder中,然后在该次请求处理完成之后,将SecurityContextHolder中关于这次请求的信息存储到一个“仓储”中,然后将SecurityContextHolder中的信息清除
例如在Session中维护一个用户的安全信息就是这个过滤器处理的。
三、HeaderWriterFilter
将指定得Header加入响应中
四、CsrfFilter
用于处理跨站请求伪造
五、LogoutFilter
用于处理退出登录
六、UsernamePasswordAuthenticationFilter
检测用户名/密码表单登录认证请求并作相应认证处理:
1.session管理,比如为新登录用户创建新session(session fixation防护)和设置新的csrf token等
2.经过完全认证的Authentication对象设置到SecurityContextHolder中的SecurityContext上;
3.发布登录认证成功事件InteractiveAuthenticationSuccessEvent
4.登录认证成功时的Remember Me处理
5.登录认证成功时的页面跳转
默认情况下处理来自“/login”的请求。
从表单中获取用户名和密码时,默认使用的表单name值为“username”和“password”,这两个值可以通过设置这个过滤器的usernameParameter 和 passwordParameter 两个参数的值进行修改。
七、DefaultLoginPageGeneratingFilter、DefaultLogoutPageGeneratingFilter
用于生成默认登入表单页面、默认得登出页面
八、BasicAuthenticationFilter
处理 Http Basic认证
大家在登录网站的时候,大部分时候是通过一个表单提交登录信息。
但是有时候浏览器会弹出一个登录验证的对话框,这就是使用HTTP基本认证
要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中,有两种方法:
一是在请求头中添加Authorization: Authorization: "Basic 用户名和密码的base64加密字符串" 。
二是在url中添加用户名和密码。
九、RequestCacheAwareFilter
对请求缓存相关能力得过滤
1.请求缓存在安全机制启动时指定
2.请求写入缓存在其他地方完成
3.典型应用场景:
1.用户请求保护的页面,
2.系统引导用户完成登录认证,
3.然后自动跳转到到用户最初请求页面
十、SecurityContextHolderAwareRequestFilter
使得request具有访问SecurityContextHolder 的能力
,从而使请求真正意义上拥有接口HttpServletRequest
中定义的getUserPrincipal
这种访问安全信息的能力
十一、AnonymousAuthenticationFilter
匿名认证过滤器
十二、SessionManagementFilter
session管理过滤器
十三、ExceptionTranslationFilter
异常处理过滤器,用来处理处理 AccessDeniedException 和 AuthenticationException 异常
十四、FilterSecurityInterceptor
AbstractInterceptUrlConfigurer.createFilterSecurityInterceptor
一个请求处理的安全处理过滤器链的最后一个,检查用户是否已经认证,如果未认证执行必要的认证,对目标资源的权限检查,如果认证或者权限不足,抛出相应的异常:AccessDeniedException
或者AuthenticationException
spring security 中有以上过滤器链对一个请求做了层层过滤,而作为开发者只需要对过滤规则做一定的配置即可。
你只需要自定义配置类继承自WebSecurityConfigurerAdapter 这个适配器、并且注解上@WebSecurityConfig 即可