1. 概要

Spring Securityは、リクエストパターンをセキュリティで保護されていない、またはすべてのアクセスを許可するように構成するためのいくつかのメカニズムを提供します。 これらのメカニズムのそれぞれに応じて、これは、そのパスでセキュリティフィルターチェーンをまったく実行しないか、フィルターチェーンを実行してアクセスを許可することを意味します。

2. access =” permitAll”

の設定要素と access =” permitAll” すべてのリクエストが許可されたその特定のパス上:

<intercept-url pattern="/login*" access="permitAll" />

または、Java構成を介して:

http.authorizeRequests().antMatchers("/login*").permitAll();

これは、セキュリティフィルターを無効にすることなく達成されます。これらは引き続き実行されるため、SpringSecurity関連の機能は引き続き使用できます。

3. filters =” none”

これはSpring3.1より前の機能であり、廃止され、Spring3.1で置き換えられました。

filters 属性は、その特定の要求パスでSpringSecurityフィルターチェーンを完全に無効にします。

<intercept-url pattern="/login*" filters="none" />

これにより、リクエストの処理にSpringSecurityの一部の機能が必要になる場合に問題が発生する可能性があります。

これは廃止された機能であるため、Springバージョン3.0より新しいSpring 3.1で使用すると、起動時に実行時例外が発生します。

SEVERE: Context initialization failed
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: 
Configuration problem: The use of "filters='none'" is no longer supported. 
Please define a separate <http> element for the pattern you want to exclude 
and use the attribute "security='none'".
Offending resource: class path resource [webSecurityConfig.xml]
	at o.s.b.f.p.FailFastProblemReporter.error(FailFastProblemReporter.java:68)

4. security =” none”

上記のエラーメッセージで見たように、Spring3.1はfilters =” none”を新しい式security=” none”に置き換えます。

スコープも変更されました–これはもはや指定されていません要素レベル。 代わりに、Spring3.1では多数要素定義する必要があります–それぞれに独自のセキュリティフィルターチェーン構成があります。 そのため、新しいセキュリティ属性は現在、 要素レベル。

実際には、これは次のようになります。

<http pattern="/resources/**" security="none"/>

またはJava構成の場合:

web.ignoring().antMatchers("/resources/**");

古いものの代わりに:

<intercept-url pattern="/resources/**" filters="none"/>

filters =” none” と同様に、これもそのリクエストパスのセキュリティフィルターチェーンを完全に無効にします。そのため、リクエストがアプリケーションで処理されると、Springセキュリティ機能は使用できなくなります。

これは、実際の処理が行われない静的リソースの提供を主に扱う上記の例では問題になりません。 ただし、リクエストが何らかの方法でプログラムで処理される場合、 require-channel 、現在のユーザーへのアクセス、セキュリティで保護されたメソッドの呼び出しなどのセキュリティ機能は利用できません。

同じ理由で、追加の属性を指定しても意味がありませんすでに構成されている要素 security =” none” その要求パスは保護されておらず、属性は単に無視されるためです。

または、 access =’IS_AUTHENTICATED_ANONYMOUSLY’ を使用して、匿名アクセスを許可することもできます。

5. security =” none”の警告

複数使用する場合要素、いくつかはで構成されています security =” none” 、これらの要素が定義される順序が重要であることに注意してください。 具体的なものが欲しい最初にパスをたどり、最後にユニバーサルパターンをたどりました。

また、 エレメントパターンを指定しません 、デフォルトでは、ユニバーサルマッチパターン「/ **」にマップされるため、この要素は最後である必要があります。 要素の順序が正しくない場合、セキュリティフィルターチェーンの作成は失敗します

Caused by: java.lang.IllegalArgumentException: A universal match pattern ('/**') 
is defined  before other patterns in the filter chain, causing them to be ignored. 
Please check the ordering in your <security:http> namespace or FilterChainProxy bean configuration
	at o.s.s.c.h.DefaultFilterChainValidator.checkPathOrder(DefaultFilterChainValidator.java:49)
	at o.s.s.c.h.DefaultFilterChainValidator.validate(DefaultFilterChainValidator.java:39)

6. 結論

この記事では、SpringSecurityを使用してパスへのアクセスを許可するオプションについて説明します。filters=” none”、security =” none”、access =” permitAll”の違いに焦点を当てます。

いつものように、例はGitHubから入手できます。