修正 Spring Security 中的角色驗證
使用 Spring Security 時,基於角色的存取控制對於保護資源至關重要。在最近的專案中,您遇到了非管理員使用者可以存取特權資源的問題。我們將檢查問題的根本原因並提供解決方案來糾正它。
您設定的 AuthenticationManagerBuilder 利用基於 JDBC 的驗證機制,利用資料來源進行使用者驗證和權限擷取。這個問題源自於使用者身分驗證查詢:
"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中文網其他相關文章!