一。比较常用(理解思路)
过滤器 和 拦截器 均体现了AOP
的编程思想,都可以实现诸如日志记录、登录鉴权等功能,但二者的不同点也是比较多的,接下来一一说明。
拦截器:看做是多个Controller中公用的功能,集中到拦截器统一处理。使用的aop的思想
在xml中配置拦截器,可以通过配置Controller方法的路径,决定那个方法放行,那个方法拦截
3、小结(属于springmvc的)
1.定义拦截器有两种方式,可以实现HandlerInterceptor接口,也可以实现HandlerInterceptorAdapter类.
2.拦截器只能在访问controller 的方法时进行拦截(只能拦截请求).
3.拦截器可以在访问controller的方法前,访问controller方法之后,和视图渲染完成之后三个时机进行功能的增强.
4./和/**的区别
/:只能匹配一级路径
/**:匹配多级路径
参考链接
狂神说SpringMVC08:拦截器+文件上传下载_狂神说的博客-CSDN博客
二。过滤器 (Filter) (servert)
过滤器 和 拦截器的 6个区别,别再傻傻分不清了_程序员小富的博客-CSDN博客_过滤器和拦截器
过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,看到Filter 接口中定义了三个方法。
init() :该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。注意:这个方法必须执行成功,否则过滤器会不起作用。
doFilter() :容器中的每一次请求都会调用该方法, FilterChain 用来调用下一个过滤器 Filter。
destroy(): 当容器销毁 过滤器实例时调用该方法,一般在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也只会被调用一次
@Component
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter 前置");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter 处理中");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
System.out.println("Filter 后置");
}
}