spring filter失效的方法
2020-06-13 本文已影响0人
chanyi
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。