Springセキュリティ–セキュリティなし、フィルターなし、アクセスpermitAll
1. 概要
Spring Securityは、リクエストパターンをセキュリティで保護されていない、またはすべてのアクセスを許可するように構成するためのいくつかのメカニズムを提供します。 これらのメカニズムのそれぞれに応じて、これは、そのパスでセキュリティフィルターチェーンをまったく実行しないか、フィルターチェーンを実行してアクセスを許可することを意味します。
2. 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”に置き換えます。
スコープも変更されました–これはもはや指定されていません
実際には、これは次のようになります。
<http pattern="/resources/**" security="none"/>
またはJava構成の場合:
web.ignoring().antMatchers("/resources/**");
古いものの代わりに:
<intercept-url pattern="/resources/**" filters="none"/>
filters =” none” と同様に、これもそのリクエストパスのセキュリティフィルターチェーンを完全に無効にします。そのため、リクエストがアプリケーションで処理されると、Springセキュリティ機能は使用できなくなります。
これは、実際の処理が行われない静的リソースの提供を主に扱う上記の例では問題になりません。 ただし、リクエストが何らかの方法でプログラムで処理される場合、 require-channel 、現在のユーザーへのアクセス、セキュリティで保護されたメソッドの呼び出しなどのセキュリティ機能は利用できません。
同じ理由で、追加の属性を指定しても意味がありません
または、 access =’IS_AUTHENTICATED_ANONYMOUSLY’ を使用して、匿名アクセスを許可することもできます。
5. 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でから入手できます。