2 回答

TA貢獻1862條經驗 獲得超7個贊
您在安全配置中發布的代碼@Order(1)
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().antMatchers("/v1/crash/consumeCrashBoxxEvent").hasRole("ADMIN").and()
.httpBasic().authenticationEntryPoint(getBasicAuthEntryPoint()).and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
如果這正是您正在使用的代碼,則@Order(2)
不會咨詢您的配置。這將是死配置。
讓我解釋!http.authorizeRequests()
==http.antMatcher("/**").authorizeRequests()
在你的第一個配置中,你使用了通配符,你的配置結果是
/v1/crash/consumeCrashBoxxEvent
如果用戶經過身份驗證并且具有 ADMIN 角色,則可以訪問Rest of URL's
如果用戶通過身份驗證則可以訪問
讓我猜猜發生了什么!
1. 您正在點擊 URL /v1/crash/consumeCrashBoxxEvent
,否則any URL
系統將提示您進行基本身份驗證。
2. 身份驗證成功后,您可以訪問任何 URL,因為您是經過身份驗證的用戶。
但是,如果我通過基本身份驗證進行了身份驗證,則我可以訪問其他 URL(受 JWT 身份驗證保護),甚至無需在請求中包含令牌。
因為正如我所說,您可以訪問任何 URL,因為您是經過身份驗證的用戶
當我在沒有使用基本身份驗證的情況下訪問受 JWT 保護的 URL 時,我必須在標頭中發送令牌,并且它會按預期工作
檢查沒有令牌您是否可以訪問。因為一旦您通過基本身份驗證登錄,就不會從服務器端注銷(即使您重新啟動服務器)。只有關閉瀏覽器才能實現注銷。因此,您可以通過關閉并再次啟動瀏覽器來測試它。并通過不發送 JWT 令牌來測試它。
還要確保您的請求到達 JwtAuthenticationTokenFilter,放入調試日志進行驗證。
正如您的問題中有很多抽象,除非您發布完整的代碼,否則很難準確預測正在發生的情況。
如果我的預測與實際有所偏差,請在評論中告訴我。

TA貢獻1805條經驗 獲得超10個贊
這是通過使用 Praveen Kumar Lalasangi 的上述答案中提供的信息解決的。
對方法的一個小改變configure就達到了目的。更新是:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.antMatcher(crashBoxxConsumeEndpoint).authorizeRequests().anyRequest()
.hasRole("ADMIN")
.and().httpBasic().authenticationEntryPoint(getBasicAuthEntryPoint())
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
添加回答
舉報