2017-04-18 13 views
2

私はSpringブートWebアプリケーションをいくつかのRESTコントローラとともに使用しています。フォームベースの認証にSpring Securityを使用しています。春のセキュリティ:ローカルリクエストの認証は必要ありません

さらに、アプリケーションはストアド・リクエストを読み取り、それを自分自身にディスパッチします。このために、カスタムのSpring Dispatcherサーブレットとストアド・リクエストのフィルタ・チェーンがあります。呼び出されると、Spring DispatcherServletはHTTPリクエストを正しいRESTコントローラに送ります(

Springセキュリティを(2)のケースで認証する必要がないように設定したいと思います。 httpリクエストがアプリケーション自体から来たときです。

これを達成する方法を知っている人はいますか?

+1

うん、私は完全に後者の場合のために春のセキュリティを無効にしたいと思います。残念ながら、開始するパスはありません。すべてのリソースが可能です。 –

+1

私はリクエストを作成してからSpring DispatcherServletに戻しているので、属性javax.servlet.ServletRequest.setAttributeを設定できると思います。もう1つのオプションは、動的値(トークン?)を持つ特定の要求ヘッダーを設定し、次に有効なトークンを持つ要求を許可することです。 –

+0

私は答えを書いたが、技術的にしか問題を解決しない。すべての人がSpring Securityをバイパスできるようにしたくないので、このリクエストを保護する必要があります。トークンを使用することもできます(前述のとおり)が、Spring Secrityを使用してチェックすることもできます。もっと良い方法は、リダイレクトの代わりにフォワードを使うことです。 Spring Securityによって再度チェックされることはありません。 – dur

答えて

4

カスタムRequestMatcher作成することができます。

HttpServletRequestにマッチするシンプルな戦略を。

ロジックを使用してリクエストを無視するかどうかを決定します。

その後AbstractRequestMatcherRegistry#requestMatchersでカスタムRequestMatcherを追加します。

アソシエイツWebSecurity#ignoringと無視RequestMatcherのリストにAbstractConfigAttributeRequestMatcherRegistry

とRequestMatcherインスタンスのリスト:

を追加することができますRequestMatcherインスタンスがSpring Securityに必要無視する。あなたのWebSecurityConfigurerAdapter#configure方法で

オーバーライドこのメソッドはWebSecurityを設定します。たとえば、特定の要求を無視する場合。例えば

public void configure(WebSecurity web) throws Exception { 
    web 
     .ignoring() 
      .requestMatchers(new MyInternalRequestMatcher()); 
} 
0

アプリケーションからのパスのurl切片を以下に追加してください。

<security:intercept-url pattern="path" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
関連する問題