当前位置: 首页 > 知识库问答 >
问题:

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

钱展
2023-03-14
$.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);
        }
    });
@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();
}
}
XMLHttpRequest cannot load http://localhost:9080/myproject/services/mobile/list?_=1359480354190. Origin http://MyIP:8080 is not allowed by Access-Control-Allow-Origin.

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

共有1个答案

诸葛雅达
2023-03-14

最新的resteasy(3.0.9-final)包括一个实用程序类org.jboss.resteasy.plugins.interceptors.corsfilter

您可以将CorsFilter对象添加到应用程序的单例对象集中,或者直接将其添加到ResteasyDeployment中的ProviderFactory中。

下面是示例应用程序类:

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;

import org.jboss.resteasy.plugins.interceptors.CorsFilter;


@ApplicationPath("/api")
public class RestApplication extends javax.ws.rs.core.Application {
    Set<Object> singletons;

    @Override
    public Set<Class<?>> getClasses() {
        HashSet<Class<?>> clazzes = new HashSet<>();
        clazzes.add(VersionService.class);
        return clazzes;
    }

    @Override
    public Set<Object> getSingletons() {
        if (singletons == null) {
            CorsFilter corsFilter = new CorsFilter();
            corsFilter.getAllowedOrigins().add("*");

            singletons = new LinkedHashSet<Object>();
            singletons.add(corsFilter);
        }
        return singletons;
    }
}
 类似资料:
  • 我正在尝试实现一个CORS响应过滤器,以允许来自我的JavaScript前端的跨域引用。我使用的是Resteasy附带的< code > wildly 10.0 . final ,如果我理解正确的话,它是< code>JAX-RS 2.0的补充。 EDIT:将@Provider添加到CorsResponseFilter中,并作为一个单独的元素添加到RestServiceConfig中。 我需要做什

  • 什么是resteasy?RESTEasy和JAX-RS有什么区别?和之间有什么区别?

  • 我有一个Java的web应用程序,我正在将一些请求从jQuery发送到配置有JAX-RS的Rest API,在我的本地机器上它运行得很好,但是在Heroku上部署它之后,它给了我一个错误 特别是,我正在从jQuery向这个endpoint发送一个POST请求。 我也为我的应用程序配置了CORS过滤器,这使得它可以在我的本地机器上工作(在这样做之前,应用程序在我的本地机器上给了我同样的错误)。总之,

  • 我试图在JBoss AS 7.1下部署一个简单的web应用程序,该应用程序与Resteasy捆绑在一起。根据文档,只需要(至少)一个空的、一个带有注释的和其他类的的类 下面是我所遵循的文档: https://docs.jboss.org/author/display/as7/jax-rs+reference+guide https://docs.jboss.org/author/display/a

  • 我正在尝试用Resteasy实现一个RESTFULL服务。当我试图在Tomcat Server7.0中运行时,iam出现异常。请在下面找到详细信息。

  • 我可以创建一个抽象的超类,并在那里简单地定义,因为提取在任何地方都是相同的。 但在Java EE7上下文中,这给我的印象是不太好,更重要的是,如果Jimmy在编写新资源时忘记添加身份验证管理,该怎么办? 有没有推荐的方法来解析所有请求的HTTP头(不管目标资源是什么),并对结果做一些通用处理?