美文网首页
spring filter失效的方法

spring filter失效的方法

作者: chanyi | 来源:发表于2020-06-13 17:07 被阅读0次

    1、问题

    在平时开发中,我们会面临这样的问题。
    对接一个项目,此项目中使用了Filter对request请求进行了一个拦截处理,此时我们需要将以前项目的中用的Filter失效,加入我们自己的Filter,对request进行我们自定义的拦截。但是前提是不能够改对方的代码。

    2、解决思路

    主要思想:查看Spring源码,我们知道Filte是需要通过FilterRegistrationBean的setFilter设置的。而FilterRegistration是继承AbstractFilterRegistrationBean,AbstractFilterRegistrationBean又继承RegistrationBean的。RegistrationBean有一个Boolean类型的enabled属性。FilterRegistrationBean继承之后则可以用来标识Filter是否可以被加入到FilterChain中。

    经过上述分析,所以我们想要使一个Filter失效,则找到其对应的FilterRegistrationBean,并将FilterRegistrationBean的enable属性设置为false即可。

    3、代码

    具体的操作代码如下:

    @Component
    public class CustomPostProcess implements BeanPostProcessor {
    
      private static final Log log = LogFactory.getLog(CustomPostProcess.class);
    
      @Override
      public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
      }
    
      @Override
      public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if(bean instanceof FilterRegistrationBean){
          log.info("FilterRegistrationBean 类型处理");
          Filter filter = ((FilterRegistrationBean) bean).getFilter();
          if(filter instanceof SessionFilter){
            ((FilterRegistrationBean) bean).setEnabled(false);
            return bean;
          }
        }
        return bean;
      }
    }
    

    说明:上述代码中我们要去取消的Filter是SessionFilter。

    相关文章

      网友评论

          本文标题:spring filter失效的方法

          本文链接:https://www.haomeiwen.com/subject/zdhztktx.html