ホームページ > Java > &#&チュートリアル > データベースロールの割り当てにもかかわらず、Spring Security のロールベースのアクセス制御が失敗するのはなぜですか?

データベースロールの割り当てにもかかわらず、Spring Security のロールベースのアクセス制御が失敗するのはなぜですか?

Patricia Arquette
リリース: 2024-12-10 09:29:19
オリジナル
353 人が閲覧しました

Why Does My Spring Security Role-Based Access Control Fail Despite Database Role Assignments?

Spring Security での無効なロール チェックの解決

Spring Security では、承認を構成すると予期しないロール チェックが発生する場合があります。提供されているコード スニペットで強調表示されている問題に対処しましょう:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    // ...
    auth
        .jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery("select username, password, 1 from users where username=?")
            .authoritiesByUsernameQuery("select users_username, roles_id  from roles_users where users_username=?")
            .rolePrefix("ROLE_");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    // ...
    http
        .csrf().disable();      
    http
        .httpBasic();
    http
        .authorizeRequests()
            .anyRequest().authenticated();
    http
        .authorizeRequests()
            .antMatchers("/users/all").hasRole("admin")
            .and()
        .formLogin();
    http
        .exceptionHandling().accessDeniedPage("/403");
}
ログイン後にコピー

問題:

「USER」ロールのみを持つユーザーがログインすると、 「管理者」ロールによって保護されているリソースにアクセスします。問題は、「users」テーブルのユーザー名列の主キー制約にあります。

解決策:

指定されたクエリ "select username,password , 1 from users where username=?" は、ユーザーのロールに関係なく常に 1 行を返すため、不適切です。これにより、データベースで付与されていない場合でも、ユーザーは希望する任意のロールを引き受けることができます。

これに対処するには、ユーザーのロールを返すようにクエリを更新する必要があります。

.usersByUsernameQuery("select username, password, role from users where username=?")
ログイン後にコピー

追加の注意:

認可設定内のマッチャーの順序は重要です。次のマッチャー "anyRequest().authenticated() は、認証されたユーザーのみがアプリケーションにアクセスできるようにするために、antMatchers("/users/all").hasRole("admin") の前に置く必要があります。

以上がデータベースロールの割り当てにもかかわらず、Spring Security のロールベースのアクセス制御が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート