【发布时间】:2013-11-25 16:00:25
【问题描述】:
我在 JAVA EE7 中工作,JAX-RS 2.0 Glassfish 4 是我的服务器。 我想在 CORS 上工作以启用来自我的域的 Ajax 请求。 我知道我需要让我的服务器启用它。我在 PHP 中做到了。像下面的代码:
<?php header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Authorization");
但是当我尝试做同样的事情时,我总是会收到这样的错误消息 "this is a screenshot"。 所以我尝试通过多种方式修改服务器 http 响应...
这是我的代码,服务器端,我使用了文件管理器/提供程序:
@Provider
@CORSBinding
public class Filter implements ContainerRequestFilter{
@Override
public void filter(ContainerRequestContext request) throws IOException {
request.getHeaders().add("Access-Control-Allow-Origin", "*");
request.getHeaders().add("Access-Control-Allow-Headers", "Authorization");
if (request.getMethod().equals("OPTIONS")) {
System.out.println("OPTIONS is requested!!!!!!!!!!!!!");
}
if (request.getMethod().equals("GET")) {
System.out.println("GET is requested!!!!!!!!!!!!!");
}
if (request.getMethod().equals("POST")) {
System.out.println("POST is requested!!!!!!!!!!!!!");
}
if (request.getMethod().equals("DELETE")) {
System.out.println("DELETE is requested!!!!!!!!!!!!!");
}
if (request.getMethod().equals("PUT")) {
System.out.println("PUT is requested!!!!!!!!!!!!!");
}
}
}
但似乎一切都被 Glassfish4 服务器提供的“防火墙安全”阻止了。 这是我的简单代码javascript:
<script>
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://127.0.0.1:8080/CV/api/v2/posts");
xhr.setRequestHeader('Authorization', 'a');
xhr.send();
</script>
我什至使用 @Prematching 注释添加了另一个过滤器来更新从 OPTIONS TO POST 的请求......但我总是丢失我在其中发送的标题(我的意思是在 POST 请求中)。
@Provider
@PreMatching
public class HttpMethodOverrideEnabler implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
containerRequestContext.setMethod("POST");
containerRequestContext.getHeaders().add("Access-Control-Allow-Origin", "*");
containerRequestContext.getHeaders().add("Access-Control-Allow-Headers","Authorization");
containerRequestContext.getHeaders().add("Access-Control-Allow-Headers","Authorization");
String override = containerRequestContext.getHeaders().getFirst( "X-HTTP-Method-Override");
if (override != null) {
containerRequestContext.setMethod(override);
}
}
我知道 Glassfish3 不支持 CORS,并且 ("https://java.net/jira/browse/GLASSFISH-16049) 他们说他们会用 JEE7 修复它。 这就是整个故事... 那么如何使用 Glassfish 服务器和 JAX-RS2 对这个 JEE7 进行 CORS。 提前致谢。
【问题讨论】:
标签: glassfish http-headers jax-rs cors