2 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
您在安全配置中發(fā)布的代碼@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)
不會(huì)咨詢您的配置。這將是死配置。
讓我解釋!http.authorizeRequests()
==http.antMatcher("/**").authorizeRequests()
在你的第一個(gè)配置中,你使用了通配符,你的配置結(jié)果是
/v1/crash/consumeCrashBoxxEvent
如果用戶經(jīng)過身份驗(yàn)證并且具有 ADMIN 角色,則可以訪問Rest of URL's
如果用戶通過身份驗(yàn)證則可以訪問
讓我猜猜發(fā)生了什么!
1. 您正在點(diǎn)擊 URL /v1/crash/consumeCrashBoxxEvent
,否則any URL
系統(tǒng)將提示您進(jìn)行基本身份驗(yàn)證。
2. 身份驗(yàn)證成功后,您可以訪問任何 URL,因?yàn)槟墙?jīng)過身份驗(yàn)證的用戶。
但是,如果我通過基本身份驗(yàn)證進(jìn)行了身份驗(yàn)證,則我可以訪問其他 URL(受 JWT 身份驗(yàn)證保護(hù)),甚至無需在請(qǐng)求中包含令牌。
因?yàn)檎缥宜f,您可以訪問任何 URL,因?yàn)槟墙?jīng)過身份驗(yàn)證的用戶
當(dāng)我在沒有使用基本身份驗(yàn)證的情況下訪問受 JWT 保護(hù)的 URL 時(shí),我必須在標(biāo)頭中發(fā)送令牌,并且它會(huì)按預(yù)期工作
檢查沒有令牌您是否可以訪問。因?yàn)橐坏┠ㄟ^基本身份驗(yàn)證登錄,就不會(huì)從服務(wù)器端注銷(即使您重新啟動(dòng)服務(wù)器)。只有關(guān)閉瀏覽器才能實(shí)現(xiàn)注銷。因此,您可以通過關(guān)閉并再次啟動(dòng)瀏覽器來測(cè)試它。并通過不發(fā)送 JWT 令牌來測(cè)試它。
還要確保您的請(qǐng)求到達(dá) JwtAuthenticationTokenFilter,放入調(diào)試日志進(jìn)行驗(yàn)證。
正如您的問題中有很多抽象,除非您發(fā)布完整的代碼,否則很難準(zhǔn)確預(yù)測(cè)正在發(fā)生的情況。
如果我的預(yù)測(cè)與實(shí)際有所偏差,請(qǐng)?jiān)谠u(píng)論中告訴我。

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
這是通過使用 Praveen Kumar Lalasangi 的上述答案中提供的信息解決的。
對(duì)方法的一個(gè)小改變configure就達(dá)到了目的。更新是:
@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);
}
添加回答
舉報(bào)