最近项目要搞国际化,发现做国际化的时候是需要添加拦截器的,但是我们项目是通过filter过滤器做登录拦截,此时的报错信息总是国际化失败。折腾半天发现原因是国际化的拦截器没有用到导致。所以在此研究了下过滤器和拦截器的执行顺序问题。
先写结论:过滤器在拦截器之前执行,这也是我国际化失败的原因
分析:
过滤器:最常见的用法就是对所有请求的字符集进行统一,org.springframework.web.filter.CharacterEncodingFilter,也有用他做权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。filter是一种servlet技术,Servlet API中提供了一个Filter接口。
拦截器:SpringMVC 拦截器也是Aop(面向切面)思想构建,但不是 Spring Aop 动态代理实现的, 主要采用责任链和适配器的设计模式来实现,直接嵌入到 SpringMVC 入口代码里面。依赖于web框架,只能对Controller请求做拦截,对其他比如直接访问静态资源的请求则没办法进行拦截处理