0

現在、Apache の CorsFilter を使用して web.xml で設定したクロス ドメイン リクエストを許可する Tomcat 8 で実行される REST API を構築しています。

<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>/webapi/*</url-pattern>
</filter-mapping>

これまでのところ簡単に、DIGEST 認証を Rest-API に追加したいと思いました。はい、ダイジェストは基本ではありません!

簡単な使用法として、web.xml でセキュリティ制約を使用したかったのです。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>all</web-resource-name>
        <url-pattern>/webapi/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>UserDatabase</realm-name>
</login-config>

認証と CORS フィルターはそれ自体で正常に機能しますが、ここで問題が発生します。CORS フィルターの前にサーブレット コンテナーによってセキュリティ制約が実行されます。そのため、認証アルゴリズムはダイジェスト認証ヘッダーで必要な CORS (クロス ドメイン要求ヘッダー) を設定しません。その結果、CORS 要求は認証で失敗します。レルムなど) に、クロス ドメイン リクエストに必要なヘッダーがありません。誰かがその問題の解決策または実装をしていますか? それとも、CORS のために独自のダイジェスト フィルターを実装する必要がありますか?!

4

1 に答える 1

0

CorsFilterを Tomcatバルブとして再実装してみて、 Digest Authenticator Valveの前に実行するように構成されていることを確認してください。

于 2015-11-01T18:59:19.070 に答える