2011-09-08 3 views
12

ザ・春のセキュリティ参照状態:Spring Securityを使用して、HTTPメソッド(GET、PUT、POSTなど)を使用して特定のURLパターンのセキュリティを確保するにはどうすればよいですか?

あなたはURLの異なるセットに異なる アクセス要件を定義するために複数の要素を使用することができますが、彼らは 記載された順に評価され、最初の一致が使用されます。したがって、あなたは の上に最も特定のマッチを置く必要があります。 メソッド属性を追加して、特定のHTTPメソッド(GET、 POST、PUTなど)との一致を制限することもできます。要求が複数のパターンに一致する場合は、順序に関係なくメソッド固有の一致が優先されます。

URLパターンへのアクセスに使用されるHTTPメソッドによって、特定のURLパターンへのアクセスが異なるようにSpring Securityを設定する方法を教えてください。

答えて

25

これは設定に関するものです。それは<intercept-url>要素は、コンフィギュレーションファイルのあなたの<http />タグに上から下に評価されることを述べている:

<http auto-config="true"> 
    <intercept-url pattern="/**" access="isAuthenticated" /> 
    <intercept-url pattern="/login.jsp" access="permitAll" /> 
</http> 

上記の例では、我々はもちろん、除いて、認証されたユーザーのみがすべてにアクセスできるようにしようとしています、ログインページ(ユーザーは最初にログインする必要があります、右?!)。しかし、これはドキュメントによると、具体的にはあまり一致しないため、はで動作しません。だから、(の1つ)この例の目的を達成する権利構成は次のとおりです。

上に、より具体的な試合を置く
<http auto-config="true"> 
    <intercept-url pattern="/login.jsp" access="permitAll" /> 
    <intercept-url pattern="/**" access="isAuthenticated" /> 
</http> 

最後に引用するのはHTTPメソッドです。ユーザーのみ認証される必要がGET経由/client/editにアクセスするには、この第二の例では

<http auto-config="true"> 
    <intercept-url pattern="/client/edit" access="isAuthenticated" method="GET" /> 
    <intercept-url pattern="/client/edit" access="hasRole('EDITOR')" method="POST" /> 
</http> 

が、POSTを経由してアクセス/client/editに(編集フォームを提出し、言うことができます:あなたは、一致を指定するためにそれを使用することができます)ユーザはEDITORロールを持つ必要があります。そのURLのパターンは、一部の場所では推奨されないかもしれませんが、それは単なる例です。

4

Javaアノテーションベースの設定が望ましい場合は、このクラスをアプリケーションにドロップします。

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().antMatchers(HttpMethod.GET).permitAll(); 
     http.authorizeRequests().antMatchers(HttpMethod.POST).denyAll(); 
     http.authorizeRequests().antMatchers(HttpMethod.DELETE,"/you/can/alsoSpecifyAPath").denyAll(); 
     http.authorizeRequests().antMatchers(HttpMethod.PATCH,"/path/is/Case/Insensitive").denyAll(); 
     http.authorizeRequests().antMatchers(HttpMethod.PUT,"/and/can/haveWildcards/*").denyAll(); 

    } 

} 

(も動作するはず春のセキュリティの以前のバージョン)は、次のMavenの依存関係を使用する:

<dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>5.0.0.M3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>5.0.0.M3</version> 
    </dependency> 
関連する問題