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