2016-04-22 1 views
10

私は、次の春のセキュリティ設定を持っている:セキュリティ保護されたエンドポイントにのみスプリングセキュリティフィルタを適用する方法はありますか?

httpSecurity 
      .csrf() 
      .disable() 
      .exceptionHandling() 
      .authenticationEntryPoint(unauthorizedHandler) 
      .and() 
      .sessionManagement() 
      .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
      .and() 
      .authorizeRequests() 
      .antMatchers("/api/**").fullyAuthenticated() 
      .and() 
      .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 

authenticationTokenFilterBean()さえ/api/**表現に一致しないエンドポイントに適用されます。私はまた、次の設定コードを追加しようとしました

@Override 
public void configure(WebSecurity webSecurity) { 
    webSecurity.ignoring().antMatchers("/some_endpoint"); 
} 

しかし、これでも私の問題は解決しませんでした。保護されたURI式に一致するエンドポイントでのみフィルタを適用するように春セキュリティを指定するにはどうすればよいですか?いくつかの特定のエンドポイントの春のセキュリティをバイパスする

答えて

9

私は同じ要件を持つアプリケーションを持っており、それを解決するために、私は基本的に使用して(与えられたアリマッチパタパタに春のセキュリティを制限

http.antMatcher("/api/**").authorizeRequests() // 
     .anyRequest().authenticated() // 
     .and() 
     .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 

を次のようにあなたがそれを読むことができます:httpだけを許可アリパターン/api/**に一致する要求にこれらの設定を呼び出すために、次のようにantMatcher)〜authenticatedユーザーandadd filterauthenticationTokenFilterBean()beforeUsernamePasswordAuthenticationFilter他のすべての要求に対しては、この設定は無効です。

+1

/api/loginのバイパス/ api/loginを完全に許可したい場合はどうすればいいですか? permitAll()を実行しても、フィルターが呼び出されます。提案してください。 – rohitpal

+0

こんにちは@rohitpal、あなたの問題を解決しましたか?私は今これに会いました。 – bejond

2

は、次の操作を行うありがとう:

httpSecurity 
    .authorizeRequests() 
    .antMatchers("/some_endpoints").permitAll() 
    .anyRequest().authenticated() 
    .and() 
    ... 
+0

エンドポイントではなく特定のフィルタに適用するパスを指定する方法はありますか? – Edd

+0

/some_endpoint/**のような/ some_endpoint/path1などを意味するのですか?...そうです... antMatcherに '/ api/** 'を受け入れるようにしてください – phoenix

+0

答え、@phoenixありがとうございます。残念ながら、これは私の問題を解決しません。フィルタは "/ some_endpoints"にも適用されますURL – Bravo

関連する問題