javaweb过滤器和springmvc拦截器:
拦截器的概念

拦截器使用
1/创建拦截器类,类中实现 handler执行前,执行后与渲染视图后的具体实现方法
public class GlobalExceptionHandler implements HandlerInterceptor {
// if( ! preHandler()){return;}
// 在处理请求的目标 handler 方法前执行
// 登录保护,权限处理等
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("request = " + request + ", response = " + response + ", handler = " + handler);
System.out.println("Process01Interceptor.preHandle");
// 会拦截请求,处理内容return true:则放行请求
// 返回false:不放行
return true;
}
// 在目标 handler 方法之后,handler报错不执行!
// 因为已经执行完毕,所以没有拦截机制,也不会返回布尔类型
// 一般是对结果进行处理,比如结果脱敏,敏感词汇检查
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("request = " + request + ", response = " + response + ", handler = " + handler + ", modelAndView = " + modelAndView);
System.out.println("Process01Interceptor.postHandle");
}
// 渲染视图之后执行(最后),一定执行!
// handler报错,会报异常
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("request = " + request + ", response = " + response + ", handler = " + handler + ", ex = " + ex);
System.out.println("Process01Interceptor.afterCompletion");
}
}
2/springmvcConfig配置中添加拦截器
细化拦截
默认拦截全部请求
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new GlobalExceptionHandler());
}
精准拦截地址
路径可以设置多个,中间 , 间隔
支持精准路径,也支持模糊路径 /* /** /user/* */user 等等均可
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new GlobalExceptionHandler()).addPathPatterns("/USER/DATA");
}
排除拦截
注:排除拦截的对象应该在拦截的范围内
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new GlobalExceptionHandler()).addPathPatterns("/USER/*").excludePathPatterns("/USERDATA");
// registry.addInterceptor(new GlobalExceptionHandler());
}
多个拦截器的执行顺序
执行顺序与filter类似,优先级高的在外层,优先级低的在内层。
具体描述:
1. preHandle() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置顺序调用各个 preHandle() 方法。
2. postHandle() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置相反的顺序调用各个 postHandle() 方法。
3. afterCompletion() 方法:SpringMVC 会把所有拦截器收集到一起,然后按照配置相反的顺序调用各个 afterCompletion() 方法。