过滤器
它使用户可以改变一个request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.换种说法,filter其实是一个“servlet chaining“(servlet 链)
要点:
- 基于函数回调实现的。
- 依赖于 servlet 容器,只能用于 Web 程序。
- 可以对所有的请求起作用。
- 不能访问 action上下文,值栈里的对象。
- 过滤器只能在容器初始化时调用一次
应用场景:
- 对请求的身份权限做校验
- 过滤敏感词
- 对数据编码处理
执行过程:
使用
@Component
@WebFilter(urlPatterns = "/**", filterName = "myFilter")
public class MyFilter implements Filter {
private static final Logger log = LoggerFactory.getLogger(MyFilter.class);
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 设置编码,身份等过滤代码
log.info("doFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("init");
}
@Override
public void destroy() {
log.info("destroy");
}
}
方法介绍:
init():容器启动时执行一次
doFilter():拦截到需要过滤的请求时执行
destory():销毁Filter时执行