http请求处理后,postHandle方法不会调用

时间:2018-02-16 08:43:52

标签: java security spring-boot interceptor spring-web

我创建了以下组件,以便在每个响应中添加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方法没有调用。

我该如何纠正?

2 个答案:

答案 0 :(得分:1)

Spring知道你的Interceptor只是一个bean而已。您需要将其注册到InterceptorRegistry,以便将其作为拦截器的一部分进行调用。

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

  @Autowired 
  SecurityInterceptor securityInterceptor;

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

答案 1 :(得分:1)

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

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

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