Spring Security 基於角色的授權問題:403 禁止錯誤
Spring Security 是一個功能強大的安全框架,用於保護應用程式免受惡意攻擊。在使用 Spring Security 過程中,角色的授權問題可能會引發 403 禁止錯誤。 php小編香蕉為您詳細介紹了這個問題,並提供了解決方案,幫助您順利解決角色授權的困擾。無論您是初學者還是有經驗的開發者,本文都將幫助您深入理解 Spring Security 的角色授權機制,並學會正確地處理 403 禁止錯誤。
問題內容
問題:
#我正在嘗試建立一個基於 spring 的 web 伺服器,並具有基於角色的身份驗證,但我始終收到 403 forbidden 錯誤。我已經實現了自訂 userdetails
類,我懷疑我的配置可能有問題。
程式碼:
自訂 userdetails
:
public class customuserdetails implements userdetails { private static final long serialversionuid = 1l; private final user user; public customuserdetails(user user) { this.user = user; } @override public collection<? extends grantedauthority> getauthorities() { return user.getroles().stream().map(r -> new simplegrantedauthority("role_" + r.getname())).tolist(); } // ... other userdetails methods }
securityfilterchain
實作:
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http .csrf(csrf -> csrf.disable()) .sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(requests -> requests .requestMatchers("/api/**").permitAll() .requestMatchers("/secret/**").hasAuthority("USER") .anyRequest().authenticated()) .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())) .addFilterBefore(authorizeFilter, UsernamePasswordAuthenticationFilter.class) .build(); }
我已經實作了一個自訂 userdetails
類別並配置了 spring security 以進行基於角色的身份驗證。但是,即使我相信角色已正確分配,我仍然遇到 403 forbidden 錯誤。我嘗試同時使用 hasrole
和 hasauthority
,但問題仍然存在。我的配置中缺少什麼?
任何見解或建議將不勝感激。謝謝!
解決方法
對於具有 JWT 的資源伺服器,權限由身份驗證轉換器設定。
預設的身份驗證轉換器是JwtAuthenticarionConverter
,它將權限轉換委託給可設定的權限轉換器(預設使用scope
聲明中的條目新增SCOPE_
前綴)。
您可以提供一個配置有另一個權限轉換器的 JwtAuthenticationConverter
(一個使用另一個聲明作為權限來源),或者切換到完全不同的 Converter<Jwt,?使用 <code>http.oauth2ResourceServer 擴充 AbstractAuthenticationToken>
(oauth2-> oauth2.jwt(Jwt -> jwt.jwtAuthenticationConverter(...))
#您也可以考慮這個額外的啟動器我維護它使用一個可配置的權限轉換器應用程式屬性(除非您在conf中提供自己的權限或身份驗證轉換器)
您可以嘗試開啟spring的TRACE日誌並找出問題發生的位置。這個建議可能無法直接幫助你,但是確實幫助我們找到了遷移到Springboot3.0時API返回403的原因
以上是Spring Security 基於角色的授權問題:403 禁止錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

我有下面的程式碼:publicSecurityFilterChainsecurityFilterChain(HttpSecurityhttp)throwsException{returnhttp.httpBasic().disable().cors().and().csrf().disable().authorizeHttpRequests().requestMatchers("

如何使用Java開發一個基於SpringSecuritySAML的單一登入系統引言:隨著網路的快速發展,越來越多的應用程式被開發出來。在這些應用程式中,使用者登入是最常見的功能之一。然而,對於企業級應用程序,用戶需要在多個系統中進行登錄,這將導致用戶的登入體驗非常糟糕。為了解決這個問題,單一登入系統(SingleSign-On,簡稱SSO)應運而生。簡

我正在嘗試使用GO實現存取令牌驗證。但我在網路上看到的例子似乎只是用TOKEN_SECRET來驗證它。但是我習慣了在Javaspring中編程,並且不需要使用TOKEN_SECRET。我只是提供jwk-set-uri,它會檢查有效性(自動-安全過濾器等),我知道它與oauth伺服器通訊並進行此驗證。 Go中是否沒有函式庫可以透過向oauth伺服器發出請求來檢查令牌是否有效?我知道我知道我可以透過向oauth伺服器的用戶資訊端點發出請求來手動進行此操作:http://localh

在後台管理系統中,通常需要存取權限控制,以限制不同使用者對介面的存取能力。如果使用者缺乏特定權限,則無法存取某些介面。本文將用waynboot-mall專案舉例,跟大家介紹常見後管系統如何引入權限控制框架SpringSecurity。大綱如下:waynboot-mall專案網址:https://github.com/wayn111/waynboot-mall一、什麼是SpringSecuritySpringSecurity是一個基於Spring框架的開源項目,旨在為Java應用程式提供強大且靈活的安

如何使用Java開發一個基於SpringSecurityOAuth2的單點登錄系統引言:隨著互聯網的高速發展,越來越多的網站和應用程式需要用戶進行登錄,而用戶卻不希望為每個網站或應用程式記住一個帳號和密碼。單一登入系統(SingleSign-On,簡稱SSO)能夠解決這個問題,允許使用者在一次登入後,無需重複認證即可存取多個網站和應用程式。本文將介紹

引言在當今互聯互通的世界中,RESTfulapi已成為應用程式之間進行通訊的關鍵機制。透過Java這款強大的程式語言,您可以建立高效、可擴充且維護良好的RESTfulAPI。第1章:RESTfulAPI基礎RESTful架構的原則和最佳實踐Http方法、狀態代碼和回應標頭JSON和XML等資料格式第2章:設計和建模RESTfulAPIRESTfulAPI設計原則資源建模和URI設計版本控制和HATEOAS第3章:使用SpringBoot建立RESTfulAPISpringBoot簡介和入門建置和

Vue.js 和 Spring Boot 透過以下方式互動:RESTful API:Vue.js 使用 Axios 傳送非同步 HTTP 請求,Spring Boot 提供 RESTful API 實作。資料傳遞:資料透過請求和回應傳遞,如請求正文或查詢參數。請求方法:GET、POST、PUT 和 DELETE 等 HTTP 請求方法用於指定操作。路由:Spring Boot @RequestMapping 註解定義控制器路由,Vue.js 使用 Vue Router 定義介面路由。狀態管理:Vu

我有一個springrest服務,我想將它用於經過身份驗證和未經身份驗證的用戶。如果使用者經過身份驗證,我想從securitycontextholder.getcontext().getauthentication()取得使用者資訊。如果我使用.antmatchers("/app/rest/question/useroperation/list/**").permitall()在ouath2配置中,如下所示,然後我可以獲取用戶資訊經過身份驗證的用戶,但未經過身份驗證的用戶會出現40