【问题标题】:Allow cross domain request to jersey web services允许对 jersey web 服务的跨域请求
【发布时间】:2017-11-24 09:46:42
【问题描述】:

面临与在球衣中允许跨域请求相关的问题。 我尝试实现com.sun.jersey.spi.container.ContainerResponseFilters,但无法配置它。

尝试从浏览器发送请求时出现异常。

org.apache.catalina.core.StandardWrapperValve 调用严重: Servlet.service() 用于带有路径的上下文中的 servlet [JAX-RS Servlet] [/crawlerweb] 抛出异常 [Servlet 执行抛出异常] 根本原因是 java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder; 在 javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119) 在 com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.j‌​ava:662)

【问题讨论】:

  • 添加评论中的内容。大多数用户不阅读 cmets ,可以在 SO 上删除 cmets 。因此,请始终通过单击编辑来考虑 [编辑] 具有充分信息的问题
  • 不要混合 Jersey 1.x 和 Jersey 2.x 或 JAX-RS 1.x 和 JAX-RS 2.x 依赖项。这是你的问题的原因。选择一个版本,并坚持下去。摆脱一切
  • 谢谢回复,我试试

标签: java web-services rest jersey cross-domain


【解决方案1】:

您必须在球衣服务中实现对 CORS 的支持。 对于跨域请求,浏览器首先发送一个带有 OPTIONS 方法的 preflight httprequest。 然后您的服务器必须返回某些 CORS 标头作为响应。

Access-Control-Allow-Origin :*
Access-Control-Allow-Methods: GET, POST

浏览器会检查这些标头是否存在,然后它会发出您想要的真正的 httprequest。

你可以试试这个

return Response.ok() 
        .entity(podcastById, detailed ? new Annotation[]{PodcastDetailedView.Factory.get()} : new Annotation[0])
        .header("Access-Control-Allow-Origin", "*")
        .header("Access-Control-Allow-Methods", "GET, POST")
        .allow("OPTIONS").build();

【讨论】:

    猜你喜欢
    • 2011-10-08
    • 2018-04-01
    • 2020-07-22
    • 2012-11-03
    • 2017-07-19
    • 2015-09-07
    • 2015-10-11
    • 2016-03-03
    • 2012-08-01
    相关资源
    最近更新 更多