web-dev-qa-db-ja.com

Springのセキュリティ構成-HttpSecurityとWebSecurity

私はSpring Security Configurationの何かを理解する必要があるだけです。以下の例を使用して...

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .httpBasic()
            .and()
            .authorizeRequests().antMatchers("/secret/**").authenticated()
            .and()
            .authorizeRequests().antMatchers("/**").permitAll();
    }

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

}

configure(WebSecurity web)メソッドの目的は何ですか?

この行のconfigure(HttpSecurity http)メソッドに/resources/**を追加するだけではいけませんか.authorizeRequests().antMatchers("/**", "/resources/**").permitAll();同じように機能しませんか?つまり、認証なしで/resources/**へのすべてのリクエストを許可しますか?

10
Kihats

WebSecurity ignoring() method Spring Securityを省略の一般的な使用。SpringSecurityの機能はいずれも使用できません。 WebSecurityはHttpSecurityに基づいています。

_@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")nconsideredです。

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

configure(HttpSecurity)は、選択の一致に基づいて、Webベースのセキュリティをリソースレベルで設定できます。次の例では、_/admin/_で始まるURLをADMIN roleを持つユーザーに制限し、他のすべてのURLをsuccessfully authentication。にする必要があることを宣言しています。

configure(WebSecurity)は、グローバルセキュリティに影響を与えるの構成設定に使用されます(リソースを無視し、デバッグモードを設定し、カスタムファイアウォール定義を実装して要求を拒否します)。たとえば、次のメソッドでは、_/resources/_で始まるすべての要求が認証で無視されるの目的になります。

16
Patel Romil

HttpSecurityを使用してpermitAll()リクエストを試行する場合。 Spring Securityフィルターチェーンからのリクエストへのアクセスが許可されます。認証/承認に基づいて許可または禁止する必要がある、このフィルターチェーンにも入る他の要求があるため、これはコストがかかります。

HttpSecurity.authorizeRequests().antMatchers("/**", "/resources/**").permitAll();

ただし、使用すると、resourcesへのリクエストはすべて、Spring Security Filter Chainを完全に通過します。画像を表示したり、JavaScriptファイルを読み取ったりするために、認証や承認を行う必要がないため、安全です。

WebSecurity.ignoring().antMatchers("/resources/**");
4
shazin

configure(HttpSecurity):特定のhttpリクエストに対してWebベースのセキュリティを設定できます。これは、選択の一致に基づいて、リソースレベルでのWebベースのセキュリティの構成に使用されます。

configure(WebSecurity):Spring Securityが無視する必要のあるRequestMatcherインスタンスを追加できます。

2
adiraju uttej