• 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);
      }
    }
    
    

    感谢各位阅读!

  • 相关阅读:
    Codeforces Round #498 (Div. 3) E. Military Problem
    codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题
    二叉排序树
    codeforces ~ 1004 C Sonya and Robots (dp)
    fragment shader的优化
    计算带宽
    trilinear filter
    GPU bubbles
    Dx12 occlusion query
    非意外的PDB错误 OK(0)
  • 原文地址:https://www.cnblogs.com/lori/p/9255298.html
Copyright © 2020-2023  润新知