web-dev-qa-db-ja.com

antMatcher()とantMatchers()の春のセキュリティアプリケーション

この質問への回答 正しい方法で解釈しているかどうかを確認したいだけです。

このように1つのパスのみを保護する必要がある場合:

_http.antMatcher("/api/**").authorizeRequests()....
_

次に、antMatcher()を使用します。

このように複数のURLパスを保護する必要がある場合:

_http
.authorizeRequests()
    .antMatchers("/high_level_url_A/sub_level_1").hasRole('USER')
    .antMatchers("/high_level_url_A/sub_level_2").hasRole('USER2')
    ...
_

次に、antMatchers()を使用します。

この質問 には2つの答えがありますが、それぞれに示されている例は、他の例に示されている例と矛盾しています。最初の答えは、作者がantMatcher()を必要としないことを示し、2番目の答えは、常にʻantMatcher()IIUCで始まることを示しています。

5
Ole

HttpSecurity.antMatcher()HttpSecurity インスタンスのデフォルトのリクエストマッチャーを AntPathRequestMatcher から AnyRequestMatcher に変更します。 ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry.antMatchers() は、現在のHttpSecurityインスタンスに関連付けられているエンドポイントのサブセットに承認ルールを適用するために使用されます。

コード例:

http
    .antMatcher("/api/**")
    .httpBasic()
        .disable()
    .authorizeRequests()
        .antMatchers("/api/user/**", "/api/ticket/**", "/index")
            .hasRole("ROLE_USER");

上記の例では、/ api/**に一致するすべてのエンドポイントに対して基本認証が無効になっています。さらに、/ api/user/**または/ api/ticket/**には、リクエストの認証にROLE_USERが含まれている必要があります。ただし、ユーザーが/ indexにアクセスしようとすると、基本認証プロンプトが表示されます。資格情報を入力すると、リクエストの認証にROLE_USERが含まれているかどうかに関係なく、ユーザーはエンドポイントへのアクセスを許可されます。これは、。antMatcher( "/ api/**")がHttpSecurityインスタンス全体のスコープをその特定のAntMatcherに制限しているためです。

以下の例では、HttpSecurityのスコープに以前の3つのAntMatcherのみが含まれていることを確認します。

http
    .requestMatchers()
        .antMatchers("/api/user/**", "/api/ticket/**", "/index")
        .and()
    .httpBasic()
        .disable()
    .authorizeRequests()
        .any()
            .hasRole("ROLE_USER");
10
dsep