Spring Security でのロール認証の修正
Spring Security を利用する場合、リソースを保護するためにロールベースのアクセス制御が重要です。最近のプロジェクトで、管理者以外のユーザーが特権リソースにアクセスできるという問題が発生しました。問題の根本原因を調査し、それを修正するための解決策を提供します。
構成された AuthenticationManagerBuilder は、JDBC ベースの認証メカニズムを活用し、ユーザー認証と権限の取得に dataSource を利用します。この問題はユーザー認証クエリに起因します:
"select username, password, 1 from users where username=?"
このクエリでは、「1」は重要ではなく、ユーザー識別の主キーは無視されます。その結果、すべてのユーザーに誤って同じロールが割り当てられ、管理者以外のユーザーがアクセス制限を回避できるようになります。
この問題を修正するには、認証クエリでユーザーに関連付けられたロール情報を明示的に取得する必要があります。
select username, password, role from users where username=?
さらに、ロールベースのアクセス制御を優先するには、HTTP セキュリティ構成を次のように変更する必要があります。
@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"); }
この構成では、anyRequest() マッチャーが最初に認証をチェックし、続いて「/users/all」のロール固有のマッチャーがチェックします。これにより、管理者以外のユーザーが特権リソースへのアクセスを拒否され、最初の問題が解決されます。
これらの変更を実装すると、Spring Security のロールベースのアクセス制御が正しく機能し、保護されたリソースへの不正アクセスが防止されます。
以上が管理者以外のユーザーが特権リソースにアクセスするときに発生する Spring Security ロールの認証の問題を修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。