前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot|springboot配置拦截器

springboot|springboot配置拦截器

作者头像
微笑的小小刀
发布2019-12-18 11:12:11
1.4K0
发布2019-12-18 11:12:11
举报
文章被收录于专栏:java技术大本营java技术大本营

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的依赖就可以了

代码语言:javascript
复制
implementation 'org.springframework.boot:spring-boot-starter-web'

新建拦截器

如果不知道如何新建,可以参考Spring源码中的LocaleChangeInterceptor

代码语言:javascript
复制
/**
 * 测试拦截器,继承的类参考 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官方文档

代码语言:javascript
复制
/**
 * @Author https://www.javastudy.cloud
 * @CreateTime 2019/11/8
 **/
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    /**
     * 在这里添加自己定义的拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TestInterceptor())
                // 只拦截test路径
        .addPathPatterns("/test/**")
                // 不拦截pass路径
        .excludePathPatterns("/pass/**");
    }
}

编写测试的controller

这块就写的很随意了

代码语言:javascript
复制
/**
 * @Author https://www.javastudy.cloud
 * @CreateTime 2019/11/8
 **/
@RestController
public 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方法做修改.等等还有很多特性小伙伴们可以自行总结下,常见用法,如文档中所示,可用于本地化,可用于安全验证等等

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java技术大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • springboot配置拦截器
  • 引入依赖
  • 新建拦截器
  • 编写测试的controller
  • 结果输出
  • DEMO总评
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档