spring Security配置攔截規(guī)則小結(jié)
問(wèn)題描述
使用spring Security實(shí)現(xiàn)后臺(tái)管理系統(tǒng)登錄驗(yàn)證加攔截,訪問(wèn)圖片即靜態(tài)資源時(shí)響應(yīng)需要登錄驗(yàn)證,分析問(wèn)題得出結(jié)論未配置security的攔截規(guī)則,沒(méi)有對(duì)靜態(tài)資源進(jìn)行登錄放行
解決方案:
配置spring Security攔截規(guī)則,將訪問(wèn)路徑添加進(jìn)入白名單中,比如博主將resources下files下的圖片設(shè)置白名單,規(guī)則就是"/files/**",以下就是博主的配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/files/**").permitAll()// 配置攔截規(guī)則
.anyRequest().authenticated();
}
}
有關(guān)spring security的配置器相關(guān)規(guī)則
http.authorizeRequests().antMatchers("/api/**").denyAll(); //拒絕api路徑下所有的訪問(wèn)
http.authorizeRequests().antMatchers("/api/**").authenticated(); //api路徑下訪問(wèn)需認(rèn)證通過(guò)
http.authorizeRequests().antMatchers("/api/**").permitAll(); //api路徑下無(wú)條件允許訪問(wèn)
端點(diǎn)保護(hù)配置
了解到這部分的知識(shí)是因?yàn)樵谧?code>OAuth2認(rèn)證的時(shí)候,我發(fā)現(xiàn)項(xiàng)目中的安全配置已經(jīng)開(kāi)放所有請(qǐng)求(即/**請(qǐng)求不進(jìn)行攔截),但是當(dāng)我訪問(wèn)/oauth/token的時(shí)候竟然提示401,百思不得其解。最后發(fā)現(xiàn)原來(lái)在Spring Security中預(yù)制了一些默認(rèn)斷點(diǎn)保護(hù)策略。具體配置是在AuthorizationServerSecurityConfiguration中
過(guò)濾規(guī)則踩到的坑
.requestMatchers().antMatchers("/test/**").and()
.authorizeRequests().antMatchers("/test/authenticated").authenticated()
.anyRequest().permitAll().and()
通過(guò)匹配規(guī)則我們可以知道這部分配置的意思是針對(duì)/test/**的請(qǐng)求將使用安全配置,/test/authenticated是需要認(rèn)證的,匹配/test/**且不是/test/authenticated的請(qǐng)求是不需要認(rèn)證的。但是在實(shí)際項(xiàng)目中卻遇到了一個(gè)坑,就是我訪問(wèn)/test/**的任何請(qǐng)求都是需要認(rèn)證的,跟了源碼發(fā)現(xiàn)是使用錯(cuò)誤,具體原因是因?yàn)槲以诶^承WebSecurityConfigurerAdapter重寫(xiě)configure(HttpSecurity http)方法的最后多寫(xiě)了一行代碼
super.configure(http);
我在最后又去調(diào)用了WebSecurityConfigurerAdapter的configure(HttpSecurity http)方法
protected void configure(HttpSecurity http) throws Exception {
logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");
http
.authorizeRequests().anyRequest().authenticated().and()
.formLogin().and()
.httpBasic();
}
這個(gè)是WebSecurityConfigurerAdapter.configure方法的源碼,它默認(rèn)會(huì)對(duì)所有請(qǐng)求進(jìn)行過(guò)濾。有興趣的同學(xué)可以跟蹤源碼會(huì)發(fā)現(xiàn)Spring Security對(duì)URL攔截規(guī)則最后是存放在Map中,即在super的配置會(huì)覆蓋掉自定義配置導(dǎo)致自定義配置失效,寫(xiě)的比較簡(jiǎn)潔可能不是很好理解。
到此這篇關(guān)于spring Security配置攔截規(guī)則小結(jié)的文章就介紹到這了,更多相關(guān)spring Security 攔截規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringSecurity自定義資源攔截規(guī)則及登錄界面跳轉(zhuǎn)問(wèn)題
- SpringSecurity攔截器鏈的使用詳解
- springsecurity實(shí)現(xiàn)攔截器的使用示例
- SpringBoot整合SpringSecurity實(shí)現(xiàn)認(rèn)證攔截的教程
- Swagger2不被SpringSecurity框架攔截的配置及說(shuō)明
- Spring Boot security 默認(rèn)攔截靜態(tài)資源的解決方法
- SpringSecurity實(shí)現(xiàn)動(dòng)態(tài)url攔截(基于rbac模型)
- Spring Security攔截器引起Java CORS跨域失敗的問(wèn)題及解決
- SpringBoot+SpringSecurity 不攔截靜態(tài)資源的實(shí)現(xiàn)
- 淺談Spring Security 對(duì)于靜態(tài)資源的攔截與放行
相關(guān)文章
透明化Sharding-JDBC數(shù)據(jù)庫(kù)字段加解密方案
這篇文章主要為大家介紹了透明化Sharding-JDBC數(shù)據(jù)庫(kù)字段加解密方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
Java實(shí)現(xiàn)的簡(jiǎn)單字符串反轉(zhuǎn)操作示例
這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單字符串反轉(zhuǎn)操作,結(jié)合實(shí)例形式分別描述了java遍歷逆序輸出以及使用StringBuffer類的reverse()方法兩種字符串反轉(zhuǎn)操作技巧,需要的朋友可以參考下2018-08-08
淺談一下Java為什么不能使用字符流讀取非文本的二進(jìn)制文件
這篇文章主要介紹了淺談一下為什么不能使用字符流讀取非文本的二進(jìn)制文件,剛學(xué)Java的IO流部分時(shí),書(shū)上說(shuō)只能使用字節(jié)流去讀取圖片、視頻等非文本二進(jìn)制文件,不能使用字符流,否則文件會(huì)損壞,需要的朋友可以參考下2023-04-04
mybatis實(shí)現(xiàn)表與對(duì)象的關(guān)聯(lián)關(guān)系_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了mybatis實(shí)現(xiàn)表與對(duì)象的關(guān)聯(lián)關(guān)系_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-09-09
Java 8 Stream 的終極技巧——Collectors 功能與操作方法詳解
這篇文章主要介紹了Java 8 Stream Collectors 功能與操作方法,結(jié)合實(shí)例形式詳細(xì)分析了Java 8 Stream Collectors 功能、操作方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05
java gui實(shí)現(xiàn)計(jì)算器小程序
這篇文章主要為大家詳細(xì)介紹了java gui實(shí)現(xiàn)計(jì)算器小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07

