一、拦截器和过滤器的区别
1、拦截器(Interceptor)只对action请求起作用 即对外访问路径
而过滤器(Filter)则可以对几乎所有的请求都能起作用 包括css js等资源文件
2、拦截器(Interceptor)是在Servlet和Controller控制器之间执行
而过滤器(Filter)是在请求进入Tomcat容器之后 但是在请求进入Servlet之前执行
web.xml加载顺序:context- param -> listener -> filter -> servlet
在请求结束返回时也是一样 是在Servlet处理完之后返回给前端之间执行
二、拦截器和过滤器的代码实现
1、拦截器
首先需要一个拦截器类 并且这个类要实现HandlerInterceptor接口
这个接口里面有三个方法:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
// 在拦截点(Controller方法处理之前)执行拦截 若返回的是false则中断执行 反之亦然
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception
{
// 在处理过程中(Controller方法处理完之后 DispatcherServlet进行视图的渲染之前)执行拦截
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
{
// 在DispatcherServlet进行视图的渲染后 返回前进行拦截
}
稍微写一下方法:
1 @Override
2 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
3 {
4 // 在Controller方法处理之前执行拦截 若返回的是false则中断执行 反之亦然
5
6 // 判断当前的User是否为空 若不为空则不拦截
7 if