web-dev-qa-db-ja.com

WebSecurityConfigurerAdapterでのWebSecurityの正しい使用

Spring Bootバージョンに基づくアプリケーション1.3.0.BUILD-SNAPSHOTには、静的リソース(イメージ、css)があります、js)staticの下のresourcesフォルダー内。

次のようなセキュリティ構成に関連するいくつかの例を参照してください。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(final WebSecurity web) throws Exception {
        web.ignoring()
           .antMatchers("/static/**");
    }
}

その例は正しいですか?どんな効果がありますか?動作することを確認する方法(例:localhost:8080/somethingWebSecurityでできること

12
JeanValjean

あなたの例は、Spring(Web)Securityが ignoring 定義した式に一致するURLパターン_("/static/**")_であることを意味します。このURLはSpring Securityによってスキップされるため、保護されていません。

Spring Securityが無視する必要があるRequestMatcherインスタンスを追加できます。 Spring Securityが提供するWebセキュリティ(SecurityContextを含む)は、一致するHttpServletRequestでは使用できません。通常、登録されるリクエストは、静的リソースのみのリクエストである必要があります。動的なリクエストの場合、代わりにすべてのユーザーを許可するようにリクエストをマッピングすることを検討してください。

詳細については、 WebSecurity APIドキュメントを参照してください。

必要な数のURLパターンを保護または保護解除できます。
Spring Securityでは、認証アクセス制御がありますアプリケーションのWebレイヤーの機能。また、指定されたロールを持つユーザーを特定のURLなどにアクセスするように制限することもできます。

詳細については、Spring Securityのリファレンスをご覧ください。
http://docs.spring.io/spring-security/site/docs/current/reference/html/


URLパターンの優先順位

指定されたパターンを着信リクエストと照合する場合、照合は要素が宣言された順序で行われます。したがって、最も具体的な一致パターンが最初に来て、最も一般的なパターンが最後に来るはずです。

Http.authorizeRequests()メソッドには複数の子があり、各マッチャーは宣言された順序で考慮されます。

パターンは常に定義された順序で評価されます。したがって、より具体的なパターンは、具体性の低いパターンよりもリストの上位で定義することが重要です。

詳細についてはこちらをお読みください:
http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#filter-security-interceptor


例1

WebSecurity ignoring()メソッドの一般的な使用では、Spring Securityが省略され、Spring Securityの機能は使用できなくなります。 WebSecurityはHttpSecurityに基づいています
(XML構成では、これを記述できます:_<http pattern="/resources/**" security="none"/>_)。

_@Override
public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/resources/**")
        .antMatchers("/publics/**");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers("/publics/**").hasRole("USER") // no effect
        .anyRequest().authenticated();
}
_

上記の例のWebSecurityでは、Springで_/resources/**_および_/publics/**_を無視できます。したがって、HttpSecurityの.antMatchers("/publics/**").hasRole("USER")は考慮されません。

これにより、セキュリティフィルターチェーンから要求パターンが完全に省略されます。このパスに一致するものには、認証または承認サービスが適用されず、自由にアクセスできることに注意してください。


例2

パターンは常に順番に評価されます。順序はです。最初のリクエストはすべてのリクエストに一致し、2番目のマッチは決して適用されないため、以下の一致は無効です。

_@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
        .antMatchers("/**").hasRole("USER")
        .antMatchers("/admin/**").hasRole("ADMIN"):
}
_
22
sven.kwiotek

あなたが共有したコードでは、静的ファイル、つまりCSS/JSなどがstaticというフォルダーにある場合、すべての静的リソースがページに追加されますが、除外した場合は

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

静的リソースはロードされません。

Spring Securityは非常に強力であり、Springは優れたドキュメントを持っているので、読んで理解してください。

リンク

0
PaulRyan17