web-dev-qa-db-ja.com

Jetty Cross Origin Filter

Jettyのクロスオリジンフィルターを構成しましたが、引き続き次のエラーが発生します。誰が間違っているのか、それを修正する方法を知っていますか?エラーメッセージの下には、オーバーライド記述子(つまり、補足web.xml)があります

エラー:

Origin http://localhost:8090 is not allowed by Access-Control-Allow-Origin.

記述子のオーバーライド:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://Java.Sun.com/dtd/web-app_2_3.dtd" >

<web-app>
 <filter>
   <filter-name>cross-Origin</filter-name>
   <filter-class>org.Eclipse.jetty.servlets.CrossOriginFilter</filter-class>
   <init-param>
       <param-name>allowedOrigins</param-name>
       <param-value>*</param-value>
   </init-param>
   <init-param>
       <param-name>allowedMethods</param-name>
       <param-value>*</param-value>
   </init-param>
   <init-param>
       <param-name>allowedHeaders</param-name>
       <param-value>*</param-value>
   </init-param>
 </filter>
 <filter-mapping>
     <filter-name>cross-Origin</filter-name>
     <filter-pattern>/*</filter-pattern>
 </filter-mapping>
</web-app>

リクエストヘッダー

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:Origin, Content-Type, Accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:8090
Referer:http://localhost:8090/home
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.942.0

応答ヘッダー

Allow:POST,GET,OPTIONS,HEAD
Content-Length:0
Date:Wed, 30 Nov 2011 02:13:21 GMT
Server:Jetty(7.5.4.v20111024)
30
Ari

アロハ、

私もこれをしばらくの間戦いました、そして、最終的なノードが必要であることがわかりました:

<filter-mapping>
    <filter-name>cross-Origin</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

ない

<filter-mapping>
     <filter-name>cross-Origin</filter-name>
     <filter-pattern>/*</filter-pattern>
</filter-mapping>

私が私を助けるために見つけたリンクはここにあります: wiki.Eclipse.org/Jetty/Feature/Cross_Origin_Filter

Web.xmlファイルを更新してjettyサーバーを再起動した後、jQuery ajax呼び出しを使用してクロスドメインリクエストを行うことができました。

ロブ

25
Robert Whitton

GAEにデプロイされたWebアプリに対してクロスドメインコールを実行したときに、これに遭遇しました。次のような明示的なヘッダーをサーブレット応答に追加できます。

public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException 
{
    res.addHeader("Access-Control-Allow-Origin", "*");
    ...
}

また、WARのルートに次のようなcrossdomain.xmlポリシーファイルがあることを確認します。

<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="http://www.Adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="*"/>
</cross-domain-policy> 

HTH。

12
user981

Jetty Web Server内のActiveMQ Ajaxでも同じ問題が発生しました。私の問題は、許可されたヘッダー「*」形式のワイルドカードを受け入れないフィールドであることでした。

ActiveMQ Ajaxを機能させるには、allowedMethodsに「Options」メソッドを追加する必要もあります。

Web.xmlからのクロスオリジンフィルター:

<filter>
   <filter-name>cross-Origin</filter-name>
   <filter-class>org.Eclipse.jetty.servlets.CrossOriginFilter</filter-class>
   <init-param>
       <param-name>allowedOrigins</param-name>
       <param-value>*</param-value>
   </init-param>
   <init-param>
       <param-name>allowedMethods</param-name>
       <param-value>GET,POST,OPTIONS,DELETE,PUT,HEAD</param-value>
   </init-param>
   <init-param>
       <param-name>allowedHeaders</param-name>
       <param-value>Origin, content-type, accept, authorization</param-value>
   </init-param>
 </filter>
 <filter-mapping>
     <filter-name>cross-Origin</filter-name>
     <url-pattern>*</url-pattern>
 </filter-mapping>
6
killer7

私(jetty-version 8.1.5.v20120716)の場合、「web.xml」の次の行のみが役立ちます。

<filter>
    <filter-name>cross-Origin</filter-name>
    <filter-class>org.Eclipse.jetty.servlets.CrossOriginFilter</filter-class>
    <init-param>
        <param-name>allowedOrigins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>allowedMethods</param-name>
        <param-value>GET,POST,DELETE,PUT,HEAD</param-value>
    </init-param>
    <init-param>
        <param-name>allowedHeaders</param-name>
        <param-value>Origin, content-type, accept</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>cross-Origin</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

ログレベルをDEBUGに変更し、jettyコンソールログから情報(「GET、POST、DELETE、PUT、HEAD」および「Origin、content-type、accept」など)を取得しました。例えば。:

DEBUG CrossOriginFilter:359-メソッドDELETEは許可されたメソッドの1つです[GET、POST、DELETE、PUT、HEAD] 19:14:28,413

DEBUG CrossOriginFilter:389-ヘッダー[Origin、content-type、accept]は許可されたヘッダーには含まれていません[*]

次に、$。ajax({url: 'anotherHost'、type: 'DELETE'、..})で結果を確認しました

4

私の多くの時間を無駄にした後、バグレポートを開きました。

https://bugs.Eclipse.org/bugs/show_bug.cgi?id=384847

また、パラメーター値のワイルドカードはほとんどサポートされていないことに注意してください。 (つまり、許可されたヘッダー)

2
user1050755