zoukankan      html  css  js  c++  java
  • 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);
      }
    }
    
    

    感谢各位阅读!

  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/lori/p/9255298.html
Copyright © 2011-2022 走看看