HandlerInterceptor拦截实现对PathVariable变量的读取

Http请求拦截作用

  • 拦截后可以修改请求体
  • 拦截后可以作一些其它统一的操作

问题提出

对于很多时间需要拦截很多Http请求,然后去获取一些参数,这些参数可能是querystring串,也可能是路由上的字符,对于前者HandlerInterceptor的request对象有自己的方法,而对于后者,需要我们特殊处理一下,也就晃今天要说的内容。

添加拦截器

这个在百度上查了很多文章,都说不能实现,而在bing上查了一下马上找到答案!还是要感谢微软!
地址:https://stackoverflow.com/questions/12249721/spring-mvc-3-how-to-get-path-variable-in-an-interceptor

 /**
   * 进行处理器拦截,action之前执行
   *
   * @param request
   * @param response
   * @param handler
   * @return
   * @throws Exception
   */
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    switch (request.getMethod()) {
      case "POST":
      case "PUT":
      case "DELETE":
        Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
        String value = (String) pathVariables.get("code");
        YearMonth accountPeriod = YearMonth.parse(request.getParameter("accountPeriod"));
        if (value == "1") {
          return false;//value为1请求结束
        }
        break;
      default:
        break;
    }
    return true;
  }

}

添加注册组件

注册组件里可以控制你要拦截的地址,这是很重要的,我们没必要拦截所有请求!

@Configuration
public class WebAppConfigurer extends WebMvcConfigurerAdapter {

  @Override
  public void addInterceptors(InterceptorRegistry interceptorRegistry) {

    //多个拦截器组成一个拦截器链
    //addPathPatterns 用于添加拦截规则
    //excludePathPatterns用于排除拦截规则
    interceptorRegistry.addInterceptor(new ValidateDataInterceptor()).addPathPatterns("/**");
    //设置(模糊)匹配的url
    //    List<String> urlPatterns = Lists.newArrayList();
    //    urlPatterns.add("/api/v1/goods/*");
    //    urlPatterns.add("/api/v1/userinfo/*");
    super.addInterceptors(interceptorRegistry);
  }
}

感谢各位阅读!

posted @   张占岭  阅读(4681)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2014-07-02 知方可补不足~用xsl来修饰xml
2013-07-02 EF架构~linq to entity的随机排序问题
点击右上角即可分享
微信分享提示