• SpringBoot下关于SpringMVC拦截器的配置


    配置spring mvc拦截器

    编写拦截器

    package sbt;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class XxxInterceptor implements HandlerInterceptor {
    	@Override
    	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    		//Controller方法调用之前调用
    		System.out.println(">>>>>>>>>>>>>>>>>>>>preHandle");
    		return true;
    	}
    	@Override
    	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    		//Controller方法调用之后调用
    		System.out.println(">>>>>>>>>>>>>>>>>>>>postHandle");
    	}
    	@Override
    	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    		//DispatcherServlet渲染对应的视图之后调用
    		System.out.println(">>>>>>>>>>>>>>>>>>>>afterCompletion");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    HandlerInterceptor与WebRequestInterceptor的区别

    拦截器的实现还有一种方式: WebRequestInterceptor, 这里说下他们的不同点, 具体的代码实现都差不多
    WebRequestInterceptor 的 preHandle 没有返回值, 方法参数中没有response, 获取request更方便, 不影响后续流程, . 也就是说WebRequestInterceptor 更针对处理请求, 比如预设参数等.
    HandlerInterceptor 的 preHandle 有返回值, 会影响到后续处理, 有response, 获取request相对会稍微多写点代码, 更注重业务处理, 比如12306可以判断是否售票时间内, 权限, 请求验签等等.
    整体来说HandlerInterceptor的功能更强大, 但获取request相对代码会多点

    使用WebMvcConfigurationSupport注册拦截器

    @Component
    public class WebMvcConfig extends WebMvcConfigurationSupport{
    	@Override
    	public void addInterceptors(InterceptorRegistry registry) {
    		InterceptorRegistration registration = registry.addInterceptor(new XxxInterceptor());
    	    registration.addPathPatterns("/**");//拦截
    	    registration.excludePathPatterns("*.html");//不拦截
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    使用WebMvcConfigurer注册拦截器

    @Component
    public class WebMvcConfig implements WebMvcConfigurer{
    	@Override
    	public void addInterceptors(InterceptorRegistry registry) {
    		InterceptorRegistration registration = registry.addInterceptor(new XxxInterceptor());
    	    registration.addPathPatterns("/**");//拦截
    	    registration.excludePathPatterns("*.html");//不拦截
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    WebMvcConfigurationSupport和WebMvcConfigurer的区别

    注册拦截器时这两个没有任何区别,但设置别的mvc配置,可能会有区别,区别是当继承WebMvcConfigurationSupport时会覆盖原配置,而WebMvcConfigurer是自定义配置。

    /*/**的区别

    /* 是拦截所有的文件夹,不包含子文件夹
    /** 是拦截所有的文件夹及里面的子文件夹

    classpath和classpath*区别:

    classpath:只会到WEB-INF\classes中查找文件。
    classpath*:不仅包含WEB-INF\classes,还会到WEB-INF\lib下的每个jar的classpath进行查找。
    注意: 用classpath*:需要遍历所有的classpath,所以加载速度是很慢的;因此,尽量避免使用classpath*。

  • 相关阅读:
    css transition属性
    程序员是不是人均黑客?
    ES本地分片逆文档频率评分策略(Shard Local IDF)导致的评分异常原理解析
    排查内存过高的问题systemd-journald
    谷歌硬件工程师年薪165万,苹果外籍员工222万,在大厂打工“香”吗?
    python学习笔记 二(注意点)
    KMP算法小结
    实时嵌入式系统环境中敏捷的基础
    【cookie和session】娓娓道来cookie和session
    Egg使用jwt拦截jtoken验证
  • 原文地址:https://blog.csdn.net/u012643122/article/details/126296352