我正在使用 AngularJS 和 Resteasy 开发一个应用程序。正如预期的那样,我面临着众所周知的问题
XMLHttpRequest cannot load http://localhost:8080/..... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 403.
正如在其他堆栈溢出帖子中看到的那样[1],我尝试使用来自Feature对象的Resteasy的CorsFilter,但我得到:
[33m02:06:57,883 WARN [org.jboss.resteasy.core.ExceptionHandler] (default task-1) failed to execute: javax.ws.rs.ForbiddenException: Origin not allowed: http://localhost:3000
at org.jboss.resteasy.plugins.interceptors.CorsFilter.checkOrigin(CorsFilter.java:194)
at org.jboss.resteasy.plugins.interceptors.CorsFilter.filter(CorsFilter.java:134)
My Cors功能 object:
@Provider
public class CorsFeature implements Feature {
@Override
public boolean configure(FeatureContext context) {
CorsFilter corsFilter = new CorsFilter();
corsFilter.getAllowedOrigins().add("*");
context.register(corsFilter);
return true;
}
}
In web.xml我补充道:
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>org.jboss.resteasy.plugins.interceptors.CorsFilter</param-value>
</context-param>
我发现当我评论这个 context-param 时,我没有得到前面提到的异常,并且响应状态是 200,而不是 403。
In the 角度模块配置我补充道:
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
我知道可以选择创建 Node.js 代理,但我想以困难的方式解决这个问题。
你能帮我克服人生中的这个大障碍吗?
谢谢 :)
稍后编辑:我设法通过注释要素类 (CorsFeature) si @Component 来实现这一点。这样应用程序上下文就可以知道它。