rest - OPTIONS 请求使用 CORS 进行 Restful 跨域

标签 rest xmlhttprequest http-options-method

在客户端,我将 Ajax.post (jquery 1.5) 与 json 一起使用。在服务器端,我使用的是 rest resteasy-jaxrs-2.0.1.GA。我发现我应该在服务器响应中添加几个 header ,并且我已经完成了以下过滤器:

public void doFilter(   ServletRequest req,
                        ServletResponse res,
                        FilterChain filterChain)
    throws IOException, ServletException {

    MyServletRequestWrapper httpReq    = new MyServletRequestWrapper((HttpServletRequest)req);
    HttpServletResponse    httpRes   = (HttpServletResponse)res;

    HttpSession session = httpReq.getSession();


    httpRes.addHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
    httpRes.addHeader(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");

   if (((HttpServletRequest) req).getMethod().equals("OPTIONS")){
        httpRes.addHeader(ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, OPTIONS, PUT, DELETE");
        httpRes.addHeader(ACCESS_CONTROL_ALLOW_HEADERS, "content-type, x-requested-with, x-requested-by");
   }

  filterChain.doFilter(httpReq, httpRes);

}

它工作正常,因为添加了 header 上方的每个 GET 响应。当我想使用 POST 请求时出现问题。当我使用 Ajax.post 时,首先服务器收到 OPTIONS 请求,并且出现以下错误:
Failed executing OPTIONS [REST_PATH] org.jboss.resteasy.spi.DefaultOptionsMethodException: No resource method found for options, return OK with Allow header
为了解决上述错误,我尝试使用与 POST ([REST_PATH]) 相同的路径但使用 @OPTION 注释添加方法调用。在那种情况下,javac 告诉我找不到符号 :class OPTIONS,即使在附加的 jaxrs 库中有一个 OPTION.class。

任何想法来解决它?我将非常感谢任何线索。

最佳答案

这个问题已经很老了,但作为其他有类似问题的人的引用 - 就在最近我遇到了一个不错的“CORS过滤器”,您可能想考虑使用。只需将以下几行添加到您的 web.xml 中,它就像一个魅力。

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CORS</filter-name>
    <servlet-name>MyServletNameGoesHere</servlet-name>
</filter-mapping>

和 Maven 依赖:
<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>1.5.1</version>
</dependency>

关于rest - OPTIONS 请求使用 CORS 进行 Restful 跨域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8077335/

相关文章:

javascript - ExtJS 4 - 访问 REST 代理和/或存储中的自定义响应 header ?

javascript - Angular js $http 服务 :- header is not accessible inside catch block

javascript - 如何将 XMLHttpRequest 响应的一部分存储为变量?

http - nginx如何处理 "OPTIONS *"请求?

Spring Data REST CORS - 如何处理预检选项请求?

android - 使用 REST Web 服务功能在 Moodle 上上传作业

java - 如何从eclipse中的java Restful服务连接到sqlserver数据库

java - 将 JSONObject 转换为 Java 对象

javascript - 检测浏览器对跨域 XMLHttpRequests 的支持?

asp.net-web-api - WebAPI CORS - 为什么 OPTIONS 请求进入我的 Controller ?