OPTIONS使用CORS请求restful跨域

在客户端,我正在使用Ajax.post(
jquery 1.5)和json.在服务器端我使用rest resteasy-jaxrs-2.0.1.GA.我找到了一个地方,我应该添加几个标头到服务器响应,我已经完成了以下过滤器:

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);

}

它工作正常,因为添加了上面标题的每个GET响应.当我想使用POST请求时出现问题.当我使用Ajax.post时,在第一个服务器获取OPTIONS请求,我有以下错误:

执行OPTIONS [REST_PATH]失败
org.jboss.resteasy.spi.DefaultOptionsMethodException:找不到选项的资源方法,使用Allow标头返回OK

为了解决上述错误,我尝试使用与POST([REST_PATH])相同的路径添加方法调用,但使用@OPTION注释.在那种情况下,javac告诉我符号:类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>
点赞