动态资源和静态资源
拦截器可以算是aop的一种实现,专门拦截对动态资源的后台请求,也就是拦截对控制层的请求,主要用于判断用户是否有权限请求后台。拦截器不会拦截静态资源,如spring boot的默认静态目录resources/static,请求其目录下的html,js,图片等都不会被拦截。因为我们的业务机密数据都在后台,而前端的静态资源可以分离出来放在静态服务器以缓解后台服务器的压力,不过这不是本篇要讨论的内容。这也是第三篇说用静态html+rest替换动态jsp的原因之一
声明拦截器
- public class MyInterceptor implements HandlerInterceptor {
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
- System.out.println("在请求前执行");
- return true;// 返回true表示拦截通过,返回false拦截不通过,取消当前请求,返回空白
- }
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView){
- System.out.println("在请求不报异常,顺利完成后执行");
- }
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex){
- System.out.println("无论请求是否异常,最后都会执行。用于清理资源,关闭连接等");
- }
- }
配置拦截器
- @SpringBootConfiguration
- public class Mvc extends WebMvcConfigurerAdapter {
- public void addInterceptors(InterceptorRegistry registry) {
- // addPathPatterns:添加拦截规则 excludePathPatterns: 排除拦截规则
- registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/error");
- }
- }
/**表示所有的请求url,包括子路径。/error是spring boot中的默认处理异常的url,所以排除掉,不拦截它。
另外可以查看
WebMvcConfigurerAdapter源码,在这里重写其他方法可以
实现其他的
mvc相关配置