4

クライアント側では、json で Ajax.post (jquery 1.5) を使用しています。サーバー側では、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リクエストを取得し、次のエラーが発生しました:

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 アノテーションを使用してメソッド呼び出しを追加しようとしました。その場合、添付された jaxrs ライブラリに OPTION.class があっても、シンボル :class OPTIONS が見つからないことが javac から通知されました。

それを修正するためのアイデアはありますか?手がかりにとても感謝しています。

4

4 に答える 4

1

この質問はかなり古いものですが、同様の問題を抱えている他の人への参考として、最近、使用を検討したい素敵な「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>
于 2013-04-06T20:19:26.637 に答える
0

Tomcat には組み込みの CORS フィルターがあります。 http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
于 2015-01-22T17:39:32.763 に答える
0

CORS フィルターは問題ない可能性があります。「上記のエラーを解決するために、POST ([REST_PATH]) と同じパスで @OPTION アノテーションを使用してメソッド呼び出しを追加しようとしていました。その場合、javac は、シンボル :class OPTIONS ができることを教えてくれました。見つからない」、「:)なしで書いたのではなく、そこにタイプミスがあったこと」@OPTIONS@OPTIONS

于 2014-10-09T08:44:16.507 に答える