2019-02-22 Spring Boot filter链

    Filter --Servlet技术支持 -- WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。

   无论是Filter,MethodInterceptor,ACL都要用到AOP,实际上都是拦截器的概念,其中要用到AbstractSecurityInterceptor总拦截器,AfterInvocationManager后置拦截,authenticationManager验证管理器,可能还要用上RunAsManager。

1--Filter的创建和销毁由WEB服务器负责。web应用程序启动时,web服务器将创建Filter的实例对象,并调用其init方法,完成对象的初始化。filter对象只会创建一次,init方法(完成对象的初始化功能)也只会执行一次

2--用destroy方法销毁Filter,在Filter的生命周期中仅执行一次。

3-- init(FilterConfig filterConfig)

FilterConfig接口:通过filterConfig对象的方法,就可获得:
  String getFilterName():得到filter的名称。
  String getInitParameter(String name): 返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
  Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
  public ServletContext getServletContext():返回Servlet上下文对象的引用。

4--FilterChain  过滤器链 ,过滤器链中的所有过滤器的doFilter方法都执行完成才能通过。

当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。

 

1.ChannelProcessingFilter

2.SecurityContextPersistenceFilter

3.ConcurrentSessionFilter

4.HeaderWriterFilter

5.CsrfFilter

6.LogoutFilter

7.X509AuthenticationFilter

8.AbstractPreAuthenticatedProcessingFilter(Subclasses)

9.CasAuthenticationFilter

10.UsernamePasswordAuthenticationFilter

11.BasicAuthenticationFilter

12.SecurityContextHolderAwareRequestFilter

13.JaasApiIntegrationFilter

14.RememberMeAuthenticationFilter

15.AnonymousAuthenticationFilter

16.SessionManagementFilter

17.ExceptionTranslationFilter

.18.FilterSecurityInterceptor

19.SwitchUserFilter

 

一、配置自定义 Filter 在 Spring Security 过滤器链中的位置

WebSecurityConfigurerAdapter  -->  configure(HttpSecurity http)  -->  

HttpSecurity 有三个常用方法来配置:

  • addFilterBefore(Filter filter, Class<? extends Filter> beforeFilter)
    在 beforeFilter 之前添加 filter, 
  • addFilterAfter(Filter filter, Class<? extends Filter> afterFilter)
    在 afterFilter 之后添加 filter
  • addFilterAt(Filter filter, Class<? extends Filter> atFilter)
    在 atFilter 相同位置添加 filter, 此 filter 不覆盖 filter


作者:Anoyi
链接:https://www.jianshu.com/p/deb512b41f99
 

 // 在 UsernamePasswordAuthenticationFilter 前添加 BeforeLoginFilter
        http.addFilterBefore(new BeforeLoginFilter(), UsernamePasswordAuthenticationFilter.class);

        // 在 CsrfFilter 后添加 AfterCsrfFilter
        http.addFilterAfter(new AfterCsrfFilter(), CsrfFilter.class);

二、spring boot 配置Filter过滤器:、

1.通过 @WebFilter 注解来配置

2.通过 @Bean 注解来配置

@Bean
public FilterRegistrationBean testFilterRegistratio
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值