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。
我创建了以下组件以将 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。