SprintBoot2.0注册自定义Filter同一个请求被拦截两次

流烟默 2018-08-08 05:28:12
自定义Filter配置类如下:
@Configuration
public class MyFilterConfig {

@Bean
public SysVisitFilter sysVisitFilter(){
return new SysVisitFilter();
}

@Bean
public FilterRegistrationBean sysVisitFilterBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new DelegatingFilterProxy("sysVisitFilter",null));
// registrationBean.setFilter(new SysVisitFilter());
// registrationBean.addInitParameter("targetFilterLifecycle","true");
registrationBean.addUrlPatterns("/*");
registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico");
registrationBean.setDispatcherTypes(DispatcherType.REQUEST);
return registrationBean;
}
}

SYSVisitFilter如下:
public class SysVisitFilter implements Filter {

private static final Logger log = LoggerFactory.getLogger(SysVisitFilter.class);

@Autowired
SysUser sysUser;

@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.debug("SysVisitFilter is to be inited...");
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String param = httpRequest.getParameter("param");
String mobileNum = httpRequest.getParameter("mobileNum");

if (httpRequest.getRequestURI().indexOf(".")>0) {
log.debug("访问静态资源 !");
}else{
StringBuffer url = httpRequest.getRequestURL();
log.debug("requestURI: "+httpRequest.getRequestURI()+"--->requestURL: "+httpRequest.getRequestURL()+"--hashcode"+this.hashCode()+"--"+this.getClass());
log.debug("this bean is : "+this+"--user: "+sysUser);
}
chain.doFilter(request,response);
}

@Override
public void destroy() {
log.debug("SysVisitFilter is to be destroied..");
}
}


浏览器发起一个请求时,如http://localhost:8080/hello,控制台会打印两遍Filter中的输出,如下图:


正常应该输出一次才对,请助!!!
...全文
282 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
流烟默 2018-08-09
  • 打赏
  • 举报
回复
已经解决了,需要查看的请移步我的博客:https://blog.csdn.net/J080624/article/details/78915382
流烟默 2018-08-08
  • 打赏
  • 举报
回复
如果把这句话放开,还会初始化两次:
// registrationBean.addInitParameter("targetFilterLifecycle","true");

com.test.filter.SysVisitFilter : SysVisitFilter is to be inited...
com.test.filter.SysVisitFilter : SysVisitFilter is to be inited...

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧