2017-01-14 7 views
0

Spring SecurityとSpring MVC for REST APIを使用してAngular 2アプリを使用しています。フロントエンドとバックアップの両方で認証を実装する前に、正常に動作していました。単純な基本認証を追加したので、カスタム認証トークンをバックエンドに送信する際に問題があります。私たちはweb.xmlでセットアップをCORSFilterし、すべてのAPIリクエストは、このフィルタによって傍受されている。このCORNフィルタを使用した角2 spring mvc 4.2.6およびspring security 4.0.1

if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) { 
    // CORS "pre-flight" request 
    response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); 
    response.addHeader("Access-Control-Allow-Headers", "X-AUTH-TOKEN"); 
    response.addHeader("Access-Control-Max-Age", "60000"); 
} 

のようなコードを持っており、あなたはそれが私たちのカスタム認証トークンを許可されて見るように、一つ、二つのフィルタを設定しています。

トークンを検証するためのカスタムフィルタを持つSpring Securityフィルタチェーンに入り、X-AUTH-TOKENをリクエストヘッダから取得しようとします。常にnullを返します。

この値をnullに設定している人は誰でも教えてください。私はフロントエンドがFirefoxデバッガツールに基づいて正しい値でX-AUTH-TOKENを送信していることを確認しました。そのトークンを取り、そのREST APIコールを作成するために郵便受けクライアントを使用した場合、正常に動作しています。 ChromeまたはFirefoxでフロントエンドをテストするときにのみ問題が発生します。

注:フロントエンドは、ポート4200で提供していますし、バックエンドは、あなたが許可されているメソッドにオプションを追加したい場合がありますポート8080

答えて

-1

で提供しています。

+0

CORSフィルタで「OPTIONS」メソッドを追加した後、私はChromeが行ったOPTIONSリクエストに対するレスポンスが同じヘッダーを返すことを確認しています。そして、私は実際にリクエストを確認して、そのリクエストヘッダをサーバに送信していますが、依然としてカスタムJWTフィルタではnullを返しています。 – user509755

0

上記の返信の手がかりを聞いて、私のカスタムバネセキュリティフィルタでは、APIのリクエストごとに "x-auth-token"にアクセスしようとしていました。しかし、CORSの場合、ブラウザは実際にリクエストする前にOPTIONSの事前フライトリクエストを行います。

OPTIONSメソッドを無視するようにチェックを追加した後、問題なく動作しました。だから、私のカスタムJWT Authフィルタは、GET、POST、PUT、DELETEリクエストのトークンの存在をチェックするだけです。

また、「dur」の提案によれば、春から開発されたCORSFilter iも削除されました。mvc 4.1.xはinbuild CORSサポートを提供し、独自のカスタムフィルタのようにカスタマイズできます。あなたのリンクに感謝します。

関連する問題