security 学习 -- filter chain

security 学习 – filter chain

将日志改为 debug 的, 则会看到 spring security default filter chain 如下:

[main] INFO  o.s.s.web.DefaultSecurityFilterChain - Creating filter chain: 
org.springframework.security.web.util.matcher.AnyRequestMatcher@1, 
[org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@2e91cf69,
org.springframework.security.web.context.SecurityContextPersistenceFilter@3494a35e,
org.springframework.security.web.header.HeaderWriterFilter@5c316230,
org.springframework.security.web.csrf.CsrfFilter@3e63bd6b,
org.springframework.security.web.authentication.logout.LogoutFilter@2157889c,
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@5111f814,
org.springframework.security.web.savedrequest.RequestCacheAwareFilter@716e6fa5,
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@91a1005,
org.springframework.security.web.authentication.AnonymousAuthenticationFilter@746e534,
org.springframework.security.web.session.SessionManagementFilter@10ba9780,
org.springframework.security.web.access.ExceptionTranslationFilter@2dacda9a,
org.springframework.security.web.access.intercept.FilterSecurityInterceptor@24f5e9e8]

不难看出 初始化了 如下的几个 filter

name作用说明
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilterSecurityContext
HeaderWriterFilter用来给http响应添加一些Header,比如X-Frame-Options,X-XSS-Protection*,X-Content-Type-Options。
CsrfFilter默认开启,用于防止csrf攻击的过滤器
LogoutFilter处理注销的过滤器
UsernamePasswordAuthenticationFilter表单提交了username和password,被封装成UsernamePasswordAuthenticationToken对象进行一系列的认证,便是主要通过这个过滤器完成的,即调用AuthenticationManager.authenticate()。在表单认证的方法中,这是最最关键的过滤器。具体过程是: 调用AbstractAuthenticationProcessingFilter.doFilter()方法执行过滤器 -> 调用UsernamePasswordAuthenticationFilter.attemptAuthentication()方法 -> 调用AuthenticationManager.authenticate()方法(实际上委托给AuthenticationProvider的实现类来处理)
RequestCacheAwareFilter内部维护了一个RequestCache,用于缓存request请求
SecurityContextHolderAwareRequestFilter此过滤器对ServletRequest进行了一次包装,使得request具有更加丰富的API(populates the ServletRequest with a request wrapper which implements servlet API security methods)
AnonymousAuthenticationFilter匿名身份过滤器,spring security为了兼容未登录的访问,也走了一套认证流程,只不过是一个匿名的身份。它位于身份认证过滤器(e.g. UsernamePasswordAuthenticationFilter)之后,意味着只有在上述身份过滤器执行完毕后,SecurityContext依旧没有用户信息,AnonymousAuthenticationFilter该过滤器才会有意义。
SessionManagementFilter和session相关的过滤器,内部维护了一个SessionAuthenticationStrategy 来执行任何与session相关的活动,比如session-fixation protection mechanisms or checking for multiple concurrent logins。
ExceptionTranslationFilter异常转换过滤器,这个过滤器本身不处理异常,而是将认证过程中出现的异常(AccessDeniedException and AuthenticationException)交给内部维护的一些类去处理。它位于整个springSecurityFilterChain的后方,用来转换整个链路中出现的异常,将其转化,顾名思义,转化以意味本身并不处理。一般其只处理两大类异常:AccessDeniedException访问异常和AuthenticationException认证异常。
FilterSecurityInterceptor这个过滤器决定了访问特定路径应该具备的权限,这些受限的资源访需要什么权限或角色,这些判断和处理都是由该类进行的。

备注
使用的依赖

<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-jwt</artifactId>
  <version>1.0.7.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-config</artifactId>
  <version>3.2.10.RELEASE</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-core</artifactId>
  <version>3.2.10.RELEASE</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-web</artifactId>
  <version>3.2.10.RELEASE</version>
  <scope>compile</scope>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值