美文网首页
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