springboot|springboot配置拦截器
16lz
2021-03-03
springboot配置拦截器
在springboot中配置拦截器大体上分为以下几步
1.引入相关的依赖
2.新建拦截器
3.配置拦截器Bean
虽然网上有很多配置方法,但是我更倾向于官方文件的配置方法,在以后的DEMO中也会是尽量和官方文档进行贴合
参考文档:https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/web.html#mvc-config-interceptors
引入依赖
只需要引一个web的依赖就可以了
implementation 'org.springframework.boot:spring-boot-starter-web'
新建拦截器
如果不知道如何新建,可以参考Spring源码中的LocaleChangeInterceptor
/** * 测试拦截器,继承的类参考 Spring源码中LocaleChangeInterceptor * 和ThemeChangeInterceptor写法 * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/public class TestInterceptor extends HandlerInterceptorAdapter { /** * 这个方法在HandlerMapping找到对应的处理对象,但还没有请求这个对象时处理 * 也就是在Controller的方法之前执行 * * @param request * @param response * @param handler 这个参数就是代码着Controller的方法 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("run in pre Handle"); return true; } /** * 在Handler/controller的方法处理完逻辑,渲染视图之前执行 * * @param request * @param response * @param handler * @param modelAndView */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("run in post Handle"); } /** * 在视图渲染完之后执行,常用于资源清理等等 * * @param request * @param response * @param handler * @param ex */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); }}
配置拦截器Bean
不知道如何配置的同学可以参考上述给出的spring官方文档
/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/@Configuration@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer { /** * 在这里添加自己定义的拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new TestInterceptor()) // 只拦截test路径 .addPathPatterns("/test/**") // 不拦截pass路径 .excludePathPatterns("/pass/**"); }}
编写测试的controller
这块就写的很随意了
/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/8 **/@RestControllerpublic class TestController { @RequestMapping("test/testInterceptor") public String testInterceptor(){ System.out.println("in test method"); return ""; } @RequestMapping("pass/testPass") public String testPass(){ System.out.println("in pass method"); return ""; }}
结果输出
走拦截器的情况
不走拦截器的情况
DEMO总评
拦截器是Web中的一大核心概念,我们常常拿拦截器与过滤器进行比较,通过代码可简单总结,拦截器是基于springMVC的,拦截器是只对Controller方法做修改.等等还有很多特性小伙伴们可以自行总结下,常见用法,如文档中所示,可用于本地化,可用于安全验证等等
©著作权归作者所有:来自51CTO博客作者mb5ffd6f53cf9c6的原创作品,如需转载,请注明出处,否则将追究法律责任更多相关文章
- springboot|springboot配置Filter过滤器
- 让小姐姐在命令行里面性感跳舞
- gradle|gradle配置阿里云镜像和插件镜像
- 你在 Python 中常常写的 with..as.. 到底是个啥?
- JAVA线程的那些事?
- 聊下JVM内存模型
- 在聊Java中的equals方法
- PMM配置监控PG数据库
- 入域时候提示无法加载指定的脱机注册表配置单元处理