Spring Security でのロールの問題の解決
問題:
Spring Security をプロジェクトでは、「ユーザー」ロールのみを持つユーザーが管理者固有のリソースにアクセスできることが観察されています。疑わしい問題はユーザー認証クエリ内にあります。
分析:
構成は、メモリ内と JDBC の両方に基づく認証を試行します。権限を取得するためのクエリは、「select users_username,roles_id fromroles_users where users_username=?」で構成されます。
原因:
ただし、この問題は、認可マッチャーの順序における論理エラーに起因します。マッチャー「anyRequest().authenticated()」が「antMatchers("/users/all").hasRole("admin")」の前に誤って配置されており、ロールに関係なくすべての認証されたユーザーのアクセスが許可されています。
解決策:
この問題に対処するには、次のように認可ルールを再編成する必要があります。 Spring Security ドキュメントで指定されている順序。以下の変更された構成はエラーを修正します:
@Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .httpBasic() .and() .authorizeRequests() .antMatchers("/users/all").hasRole("admin") .anyRequest().authenticated() .and() .formLogin() .and() .exceptionHandling().accessDeniedPage("/403"); }
この変更により、「admin」ロールを持つユーザーのみが「/users/all」へのアクセスを許可され、管理者以外のユーザーはアクセスが制限されます。保護されたリソースへのアクセス
以上がSpring Security がユーザーの役割に基づいてアクセスを適切に制限できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。