我有一个拦截器:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor());
}
我可以在上面的RequestInterceptor.java中添加我的CORS配置吗?像这样:
public class RequestInterceptor extends HandlerInterceptorAdapter
{
...
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
...
...
if (request.getMethod().equals("OPTIONS")) {
response.setHeader("Access-Control-Allow-Origin", "http://localhost:9090");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
response.setHeader("Access-Control-Expose-Headers", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Max-Age", "4800");
}
...
return true;
}
}
我不希望使用这些方法,因为某些原因它们对我不起作用:
@CrossOrigin
OR
WebMvcConfigurerAdapter -> addCorsMapping()
对我来说唯一有用的是拥有一个CORSFilter并将其映射到web.xml中。但这让我想到拦截器也是一种过滤器,不是吗?那么为什么要在拦截器本身会做的时候添加一个过滤器和一个拦截器。
无论如何,我尝试使用上面的代码,并且我的请求降落在服务器中,其余的控制器方法正在运行,但是我在ReactJs页面上看到了以下响应:
SEC7120: Origin http://localhost:9090 not found in Access-Control-Allow-Origin header.
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
我想念什么?对于CORS,我在RequestInterceptor.java类中还有什么要做?
谢谢。