代码之家  ›  专栏  ›  技术社区  ›  Shuai Li

无法在postHandle侦听器中设置响应标头

  •  0
  • Shuai Li  · 技术社区  · 7 年前

    最近我尝试在中添加一个响应头 postHander 拦截器

        public boolean preHandle(HttpServletRequest request,
          HttpServletResponse response, Object handler) throws Exception{
            System.out.println("preHandle");
            response.setHeader("aaa","aaa");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            super.postHandle(request, response, handler, modelAndView);
    
            response.setHeader("bbb","bbb");
            System.out.println("postHandler");
        }
    

    这是我的主代码,但当我向服务器发送请求时,只有 aaa 已添加到响应标头。

    enter image description here

    但控制台仍然记录

    preHandle
    postHandler
    

    postHandle

    为什么?如何解决这个问题?

    0 回复  |  直到 7 年前
        1
  •  0
  •   Jason Portnoy    7 年前

    这是一个有效的例子。如果非要我猜的话,这是在中国发生的事情

    super.postHandle(request, response, handler, modelAndView);
    

    网络配置

    @Component
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new CustomHandleInterceptor());
        }
    }
    

    拦截器

    @Component
    public class CustomHandleInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            response.setHeader("pre","works");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            response.setHeader("post","works");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            response.setHeader("complete","works");
        }
    }
    

    @Controller
    public class GreetingController {
        @GetMapping("/greeting")
        public String greetingMethod(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
            model.addAttribute("name", name);
            return "greeting";
        }
    }
    

    响应头

    $ curl -I  http://localhost:8080/greeting
    HTTP/1.1 200 
    pre: works
    post: works
    complete: works
    Content-Type: text/html;charset=UTF-8
    Content-Language: en-US
    Content-Length: 212
    Date: Fri, 15 Mar 2019 01:42:08 GMT