修正 Spring Security 中的角色授權
Spring Security 提供強大的授權機制,但不正確的設定可能會導致安全漏洞。本文解決了一個常見問題,即具有有限角色的使用者可以存取為管理員保留的資源。
提供的程式碼片段使用記憶體中驗證和 JDBC 身份驗證來設定 Spring Security。雖然問題歸因於從用戶中選擇用戶名、密碼 1,其中用戶名=?查詢,真正的罪魁禍首在別處。
問題源自於authorizeRequests()方法中匹配器的順序。 Spring Security 依序評估配對器,第一個符合決定授權決策。在這種情況下,以下匹配器:
.anyRequest().authenticated()
放置在基於角色的匹配器之前:
.antMatchers("/users/all").hasRole("admin")
因此,只要用戶經過身份驗證,所有請求都會被授權,無論其角色如何。要解決此問題,請重新排序匹配器,以便基於角色的匹配器優先:
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"); }
使用此修訂後的配置,僅具有“user”角色的用戶將被拒絕訪問“/users /all」而具有「admin」角色的使用者將具有存取權限。
設定 Spring Security 授權時記住匹配器的順序很重要,以確保預期的安全性策略是強制執行。
以上是為什麼我的 Spring Security 基於角色的授權失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!