在访问add接口,发现被Spring Security的登录页面拦截,可以猜到这是发了Security框架的过滤器。Spring Security本质上就是一个过滤器链。下面介绍Security框架的过滤器链。
1.过滤器链
- WebAsyncManagerIntegrationFilter:将SecurityContext集成到Spring MVC中用于管理异步请求处理的WebAsyncManager中。
- SecurityContextPersistenceFilter:在当前会话中填充SecurityContext,SecurityContext既Security的上下文对象,里面包含了当前用户的认证及权限信息等。
- HeaderWriterFilter:向请求的Header中添加信息。
- CsrfFilter:用于防止CSRF(跨域请求伪造)攻击。Spring Security会对所有post请求验证是否包含系统生成的CSRF的信息,如果不包含则报错。
- LogoutFilter:匹配URL为“/logout”的请求,清除认证信息,实现用户注销功能。
- UsernamePasswordAuthenticationFilter:认证操作的过滤器,用于匹配URL为“/login”的POST请求做拦截,效验表单中的用户名和密码。
- DefaultLoginPageGeneratingFilter:如果没有配置登陆页面,则生成默认的认证页面。
- DefaultLogoutPageGeneratingFilter:用于生成默认的退出登陆页面
- BasicAuthenticationFilter:用于Http基本认证,自动解析Http请求头中名为Authentication的内容,并获得内容中“basic”开头之后的信息。
- RequestCacheAwareFilter:用于缓存HttpServletRequest
- SecurityContextHolderAwareRequestFilter:用于封装ServletRequest,让ServletRequest具备更多功能。
- AnonymousAuthenticationFilter:对于未登陆情况下的处理,当SecurityContestHolder中认证信息为空,则会创建一个匿名用户存入到SecurityContextHolder中。
- SessionManagementFilter:限制同一用户开启多个会话。
- ExceptionTranslationFilter:异常过滤器,用来处理在认证授权过程中抛出异常。
- FilterSecurityInterceptor:获取授权信息,根据SecurityContestHolder中存储的用户信息判断用户是否有权限访问。
2.过滤器加载过程
Springboot在整合Spring Security项目时会自动配置DelegatingFilterProxy过滤器,若非Springboot工程,则需要动手配置该过滤器。