http请求处理后未调用postHandle方法

postHandle method is not invoking after http request handling

我创建了以下组件以将 X-Frame-Options 添加到每个响应中:

@Component
public class SecurityInterceptor extends HandlerInterceptorAdapter {

    @PostConstruct
    public void init(){
        System.out.println("init");
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        response.addHeader("X-Frame-Options", "DENY");
    }
}

方法init在启动时执行,因此spring知道这一点。

我还有以下休息服务:

@PostMapping("/rest_upload")
public DeferredResult<ResponseEntity> upload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request) throws IOException {
    final DeferredResult<ResponseEntity> deferredResult = new DeferredResult<>();
    ...
    return deferredResult;
}

很遗憾,postHandle 方法没有被调用。

我该如何更正它?

Spring 知道您的拦截器只是一个 bean,仅此而已。您需要使用 InterceptorRegistry 注册它,以便它作为拦截器的一部分被调用。

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

  @Autowired 
  SecurityInterceptor securityInterceptor;

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(securityInterceptor); 
  }
}

您需要一个扩展 WebMvcConfigurerAdapter 并覆盖 addInterceptor 方法的配置 class:

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new SecurityInterceptor());
}

您还需要确保在 Spring 中启用了 WebMvc。