詳解Spring Security中的HttpBasic登錄驗(yàn)證模式
一、HttpBasic模式的應(yīng)用場(chǎng)景
HttpBasic登錄驗(yàn)證模式是Spring Security實(shí)現(xiàn)登錄驗(yàn)證最簡(jiǎn)單的一種方式,也可以說(shuō)是最簡(jiǎn)陋的一種方式。它的目的并不是保障登錄驗(yàn)證的絕對(duì)安全,而是提供一種“防君子不防小人”的登錄驗(yàn)證。
就好像是我小時(shí)候?qū)懭沼?,都買(mǎi)一個(gè)帶小鎖頭的日記本,實(shí)際上這個(gè)小鎖頭有什么用呢?如果真正想看的人用一根釘子都能撬開(kāi)。它的作用就是:某天你的父母想偷看你的日記,拿出來(lái)一看還帶把鎖,那就算了吧,怪麻煩的。
舉一個(gè)我使用HttpBasic模式的進(jìn)行登錄驗(yàn)證的例子:我曾經(jīng)在一個(gè)公司擔(dān)任部門(mén)經(jīng)理期間,開(kāi)發(fā)了一套用于統(tǒng)計(jì)效率、分享知識(shí)、生成代碼、導(dǎo)出報(bào)表的Http接口。純粹是為了工作中提高效率,同時(shí)我又有一點(diǎn)點(diǎn)小私心,畢竟各部之間是有競(jìng)爭(zhēng)的,所以我給這套接口加上了HttpBasic驗(yàn)證。公司里隨便一個(gè)技術(shù)人員,最多只要給上一兩個(gè)小時(shí),就可以把這個(gè)驗(yàn)證破解了。說(shuō)白了,這個(gè)工具的數(shù)據(jù)不那么重要,加一道鎖的目的就是不讓它成為公開(kāi)數(shù)據(jù)。如果有心人破解了,真想看看這里面的數(shù)據(jù),其實(shí)也無(wú)妨。這就是HttpBasic模式的典型應(yīng)用場(chǎng)景。
二、spring boot2.0整合Spring security
spring boot 2,x版本maven方式引入Spring security坐標(biāo)。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
三、HttpBasic登錄認(rèn)證模式
如果使用的Spring Boot版本為1.X版本,依賴(lài)的Security 4.X版本,那么就無(wú)需任何配置,啟動(dòng)項(xiàng)目訪問(wèn)則會(huì)彈出默認(rèn)的httpbasic認(rèn)證.
我們現(xiàn)在使用的是spring boot2.0版本(依賴(lài)Security 5.X版本),HttpBasic不再是默認(rèn)的驗(yàn)證模式,在spring security 5.x默認(rèn)的驗(yàn)證模式已經(jīng)是表單模式。所以我們要使用Basic模式,需要自己調(diào)整一下。并且security.basic.enabled已經(jīng)過(guò)時(shí)了,所以我們需要自己去編碼實(shí)現(xiàn)。
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.httpBasic()//開(kāi)啟httpbasic認(rèn)證 .and() .authorizeRequests() .anyRequest() .authenticated();//所有請(qǐng)求都需要登錄認(rèn)證才能訪問(wèn) } }
啟動(dòng)項(xiàng)目,在項(xiàng)目后臺(tái)有這樣的一串日志打印,冒號(hào)后面的就是默認(rèn)密碼。
Using generated security password: 0cc59a43-c2e7-4c21-a38c-0df8d1a6d624
我們可以通過(guò)瀏覽器進(jìn)行登錄驗(yàn)證,默認(rèn)的用戶(hù)名是user.(下面的登錄框不是我們開(kāi)發(fā)的,是HttpBasic模式自帶的)
當(dāng)然我們也可以通過(guò)application.yml指定配置用戶(hù)名密碼
spring: security: user: name: admin password: admin
四、HttpBasic模式的原理說(shuō)明
- 首先,HttpBasic模式要求傳輸?shù)挠脩?hù)名密碼使用Base64模式進(jìn)行加密。如果用戶(hù)名是 "admin" ,密碼是“ admin”,則將字符串"admin:admin" 使用Base64編碼算法加密。加密結(jié)果可能是:YWtaW46YWRtaW4=。
- 然后,在Http請(qǐng)求中使用Authorization作為一個(gè)Header,“Basic YWtaW46YWRtaW4=“作為Header的值,發(fā)送給服務(wù)端。(注意這里使用Basic+空格+加密串)
- 服務(wù)器在收到這樣的請(qǐng)求時(shí),到達(dá)BasicAuthenticationFilter過(guò)濾器,將提取“ Authorization”的Header值,并使用用于驗(yàn)證用戶(hù)身份的相同算法Base64進(jìn)行解碼。
- 解碼結(jié)果與登錄驗(yàn)證的用戶(hù)名密碼匹配,匹配成功則可以繼續(xù)過(guò)濾器后續(xù)的訪問(wèn)。
所以,HttpBasic模式真的是非常簡(jiǎn)單又簡(jiǎn)陋的驗(yàn)證模式,Base64的加密算法是可逆的,你知道上面的原理,分分鐘就破解掉。我們完全可以使用PostMan工具,發(fā)送Http請(qǐng)求進(jìn)行登錄驗(yàn)證。
總結(jié)
以上所述是小編給大家介紹的Spring Security中的HttpBasic登錄驗(yàn)證模式,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
SpringBoot項(xiàng)目配置明文密碼泄露問(wèn)題的處理方式
這篇文章主要介紹了SpringBoot項(xiàng)目配置明文密碼泄露問(wèn)題的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06idea 實(shí)現(xiàn)git rebase操作應(yīng)用場(chǎng)景
本文結(jié)合idea工具進(jìn)行rebase的各種場(chǎng)景的操作,借助工具更能直觀地觀察到分支之間地操作差異,方便我們理解rebase的各種操作以及場(chǎng)景的使用,對(duì)idea git rebase操作知識(shí)感興趣的朋友一起看看吧2024-01-01Java實(shí)現(xiàn)的斷點(diǎn)續(xù)傳功能的示例代碼
本篇文章主要介紹了Java實(shí)現(xiàn)的斷點(diǎn)續(xù)傳功能的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Spring中的事務(wù)管理及實(shí)現(xiàn)方式解析
這篇文章主要介紹了Spring中的事務(wù)管理及實(shí)現(xiàn)方式解析,Spring事務(wù)管理基于底層數(shù)據(jù)庫(kù)本身的事務(wù)處理機(jī)制,數(shù)據(jù)庫(kù)事務(wù)的基礎(chǔ),是掌握Spring事務(wù)管理的基礎(chǔ),這篇總結(jié)下Spring事務(wù),需要的朋友可以參考下2024-01-01springboot集成redis實(shí)現(xiàn)簡(jiǎn)單秒殺系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了springboot集成redis實(shí)現(xiàn)簡(jiǎn)單秒殺系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12java?Springboot實(shí)現(xiàn)教務(wù)管理系統(tǒng)
這篇文章主要介紹了java?Springboot實(shí)現(xiàn)教務(wù)管理系統(tǒng)的過(guò)程,文章圍繞實(shí)現(xiàn)過(guò)程展開(kāi)全文詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的朋友可以參考一下,希望對(duì)你有所幫助2021-11-11springcloud整合seata的實(shí)現(xiàn)代碼
這篇文章主要介紹了springcloud整合seata的實(shí)現(xiàn)方法,整合步驟通過(guò)引入spring-cloud-starter-alibaba-seata?jar包,文中結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05