2016-08-20 7 views
0

私はAbstractAuthenticationProcessingFilterを拡張するフィルタを持っています。私は以下の持っているセキュリティ設定のクラス、フィルタはSpringブートプロジェクトで2回呼び出されます

@Override 
    protected void configure(final HttpSecurity http) throws Exception { 
     http.addFilterBefore(getMyFilter(), BasicAuthenticationFilter.class); 
     http.addFilterAfter(getMyFilter2(), MyFilter.class); 
     http.csrf().disable().authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll(); 
    } 

    private MyFilter getMyFilter() { 
     return new MyFilter(properties, apiConsumer); 
    } 

私は郵便配達してRESTエンドポイントを呼び出すと、MyFilterdoFilter方法は、二回のヒットを取得します。両方とも、ServletRequestには同じrequestedSessionIdstrippedServletPathがあります。

MyFilter2GenericFilterBeanに拡張されている場合は、1回のみ呼び出します。

フィルタの実行の順序はMyFilter.doFilterある - >MyFilter2.doFilter - >MyFilter.doFilter

何の理由になり、どのように私は、根本的な原因を見つけることができますか?

+1

。その注釈を削除すると、一度だけヒットする – Harshana

答えて

0

私は、この動作が最初のリクエスト(基本認証ポップアップウィンドウが表示されたとき)にのみ表示されると推測しています。もしそうなら、これは基本的な認証仕様とそれがSpringのBasicAuthenticationFilterで実装されているためです。

サービスを初めて呼び出すと、Springは要求に応じてAuthorizationヘッダーを探します。存在しない場合は、WWW-Authenticate: Basicヘッダー付きの応答をブラウザに送信します。 ブラウザが特定のヘッダーでこの応答を受信すると、認証ポップアップが表示されます。あなたのユーザーとパスワードを入力すると、ブラウザは別のリクエストを行い(今では適切なAuthorizationヘッダー付き)、Springはリクエストを適切に承認することができます。

問題は、そのプロセス全体で、Springが(要求ごとに)フィルタチェーンを2回処理していることです。

あなたはここで基本認証の詳細を読むことができます:私は@Component注釈付きmyFilterを定義していた https://en.wikipedia.org/wiki/Basic_access_authentication

+1

ありがとうございますが、私はリクエストを呼び出すために郵便配達員を使用しています。私はそのような認証ポップアップを取得しません。 – Harshana

+0

郵便配達員を使用していて、それが 'Basic Auth'認証の場合、同じ方法で動作します(郵便配達員はこの多段階認証プロセス自体を処理します) –

+0

No authを選択します – Harshana

関連する問題