使用JAX-RS / RESTEasy实现CORS的Ajax请求

前端之家收集整理的这篇文章主要介绍了使用JAX-RS / RESTEasy实现CORS的Ajax请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个服务器(Apache和JBoss AS7),我需要提供对客户端的所有http方法的访问.所有这些请求必须通过ajax发送.
客户端代码示例:
$.ajax({
      type: "get",url: "http://localhost:9080/myproject/services/mobile/list",crossDomain: true,cache: false,dataType: "json",success: function(response) {
        console.log(response);
      },error: function (jqXHR,textStatus,errorThrown) {
        console.log(textStatus);
        console.log(jqXHR.responseText);
        console.log(errorThrown);
        }
    });

在JBoss AS7中我使用RESTEasy,实现如下CORS:

@Path("/mobile")
@Provider
@ServerInterceptor
public class GroupMobile implements MessageBodyWriterInterceptor {

@Inject
private GroupDAO groupDAO;

@GET
@Path("/list")
@Produces(MediaType.APPLICATION_JSON)
public List<Group> getGroups() {
    return groupDAO.listAll();
}

@Override
public void write(MessageBodyWriterContext context) throws IOException,WebApplicationException {
    context.getHeaders().add("Access-Control-Allow-Origin","*");
    context.proceed();
}

@OPTIONS
@Path("/{path:.*}")
public Response handleCORSRequest(
        @HeaderParam("Access-Control-Request-Method") final String requestMethod,@HeaderParam("Access-Control-Request-Headers") final String requestHeaders) {
    final ResponseBuilder retValue = Response.ok();

    if (requestHeaders != null)
        retValue.header("Access-Control-Allow-Headers",requestHeaders);

    if (requestMethod != null)
        retValue.header("Access-Control-Allow-Methods",requestMethod);

    retValue.header("Access-Control-Allow-Origin","*");

    return retValue.build();
}
}

web.xml和beans.xml是空文件.
当我访问MyIP:8080(Apache)时,收到错误消息:

XMLHttpRequest cannot load http://localhost:9080/myproject/services/mobile/list?_=1359480354190. Origin http://MyIP:8080 is not allowed by Access-Control-Allow-Origin.

有人知道出了什么问题吗?

解决方法

您遇到的问题是您正在尝试跨站点脚本.您访问了http:// MyIP:8080页面,因此浏览器阻止您访问该域外的资源.这是非常特定于浏览器的,基于浏览器的解决方案都会有所不同(您可以在Chrome中全局禁用安全性,在IE中基于每个站点禁用安全性).

如果您将页面加载为http:// localhost:8080,则应该允许您访问该查询.或者,您可以实现转发请求的代理.

猜你在找的Ajax相关文章