spring security的核心过滤器

spring security的核心过滤器

spring security 加载时会初始化 DefaultSecurityFilterChain

public final class DefaultSecurityFilterChain implements SecurityFilterChain {
    private static final Log logger = LogFactory.getLog(DefaultSecurityFilterChain.class);
    private final RequestMatcher requestMatcher;
    private final List filters;

    public DefaultSecurityFilterChain(RequestMatcher requestMatcher, List filters) {
        logger.info("Creating filter chain: " + requestMatcher + ", " + filters);
        this.requestMatcher = requestMatcher;
        this.filters = new ArrayList(filters);
    }
    ...
}

debug可以看到启动时加载的过滤器,其中 JwtAuthenticationTokenFilter 是我们项目当中自定义的 jwt 登录的过滤器,MyFilterSecurityInterceptor 是我们项目中用来做url权限匹配的过滤器。

image.png

spring security主要的过滤器有以下这些:

  • WebAsyncManagerIntegrationFilter
  • SecurityContextPersistenceFilter
  • HeaderWriterFilter
  • CsrfFilter
  • CorsFilter
  • LogoutFilter
  • UsernamePasswordAuthenticationFilter
  • RequestCacheAwareFilter
  • SecurityContextHolderAwareRequestFilter
  • AnonymousAuthenticationFilter
  • SessionManagementFilter
  • ExceptionTranslationFilter
  • FilterSecurityInterceptor

SecurityContextPersistenceFilter

是过滤链的开始,它会确认当前用户的认证信息,放入 SecurityContextHolder 当中,创建 SecurityContext ,请求结束以后会清除该信息。

WebAsyncManagerIntegrationFilter

源码注解是说:
Provides integration between the {@link SecurityContext} and Spring Web's

指的是将 WebAsyncManager 与 SecurityContext 做了集成,如果用到 spring mvc 中的异步请求,也能获取到用户上下文认证信息。

HeaderWriterFilter

往请求的 Header 中添加一些信息。

CsrfFilter

用于防止csrf攻击,通过客户端的 token 与服务端的 token 比对来判断请求。

CorsFilter

用于处理跨域请求。

LogoutFilter

匹配登出请求,默认为 /logout,清理认证信息。

UsernamePasswordAuthenticationFilter

匹配登录请求,默认为 /login 的 POST 请求,用来封装表单提交的用户名密码,封装成 UsernamePasswordAuthenticationToken

RequestCacheAwareFilter

用来缓存request请求

SecurityContextHolderAwareRequestFilter

针对不同版本,对 ServletRequest 做了包装

AnonymousAuthenticationFilter

匿名用户过滤器,如果未登录,会创建一个 Principal 为 ROLE_ANONYMOUS 的 Authentication 放到 SecurityContextHolder 中。

SessionManagementFilter

用来对session做一些处理,持久化用户登录信息,可以用来限制同一账号的会话个数

ExceptionTranslationFilter

异常过滤,处于整个链后部,用来转化访问异常 AccessDeniedException 和认证异常 AuthenticationException

FilterSecurityInterceptor

用于判断和处理请求访问需要的权限,角色等信息。

你可能感兴趣的:(spring security的核心过滤器)