
[TOC]
## 一、HttpBasic模式的應用場景
HttpBasic登錄驗證模式是Spring Security實現登錄驗證最簡單的一種方式,也可以說是最簡陋的一種方式。它的目的并不是保障登錄驗證的絕對安全,而是提供一種“防君子不防小人”的登錄驗證。
就好像是我小時候寫日記,都買一個帶小鎖頭的日記本,實際上這個小鎖頭有什么用呢?如果真正想看的人用一根釘子都能撬開。它的作用就是:某天你的父母想偷看你的日記,拿出來一看還帶把鎖,那就算了吧,怪麻煩的。
舉一個我使用HttpBasic模式的進行登錄驗證的例子:我曾經在一個公司擔任部門經理期間,開發了一套用于統計效率、分享知識、生成代碼、導出報表的Http接口。純粹是為了工作中提高效率,同時我又有一點點小私心,畢竟各部之間是有競爭的,所以我給這套接口加上了HttpBasic驗證。公司里隨便一個技術人員,最多只要給上一兩個小時,就可以把這個驗證破解了。說白了,這個工具的數據不那么重要,加一道鎖的目的就是不讓它成為公開數據。如果有心人破解了,真想看看這里面的數據,其實也無妨。這就是HttpBasic模式的典型應用場景。
## 二、spring boot2.0整合Spring security
spring boot 2,x版本maven方式引入Spring security坐標。
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
```
## 三、HttpBasic登錄認證模式
**如果使用的Spring Boot版本為1.X版本,依賴的Security 4.X版本,那么就無需任何配置,啟動項目訪問則會彈出默認的httpbasic認證.**
我們現在使用的是spring boot2.0版本(依賴Security 5.X版本),HttpBasic不再是默認的驗證模式,在spring security 5.x默認的驗證模式已經是表單模式。所以我們要使用Basic模式,需要自己調整一下。并且`security.basic.enabled`已經過時了,所以我們需要自己去編碼實現。
```
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic()//開啟httpbasic認證
.and()
.authorizeRequests()
.anyRequest()
.authenticated();//所有請求都需要登錄認證才能訪問
}
}
```
啟動項目,在項目后臺有這樣的一串日志打印,冒號后面的就是默認密碼。
```
Using generated security password: 0cc59a43-c2e7-4c21-a38c-0df8d1a6d624
```
我們可以通過瀏覽器進行登錄驗證,默認的用戶名是user.(下面的登錄框不是我們開發的,是HttpBasic模式自帶的)

當然我們也可以通過application.yml指定配置用戶名密碼
```
spring:
security:
user:
name: admin
password: admin
```
## 四、HttpBasic模式的原理說明

* 首先,HttpBasic模式要求傳輸的用戶名密碼使用Base64模式進行加密。如果用戶名是?`"admin"`??,密碼是“ admin”,則將字符串`"admin:admin"?`使用Base64編碼算法加密。加密結果可能是:YWtaW46YWRtaW4=。
* 然后,在Http請求中使用Authorization作為一個Header,“Basic YWtaW46YWRtaW4=“作為Header的值,發送給服務端。(注意這里使用Basic+空格+加密串)
* 服務器在收到這樣的請求時,到達BasicAuthenticationFilter過濾器,將提取“ Authorization”的Header值,并使用用于驗證用戶身份的相同算法Base64進行解碼。
* 解碼結果與登錄驗證的用戶名密碼匹配,匹配成功則可以繼續過濾器后續的訪問。
所以,HttpBasic模式真的是非常簡單又簡陋的驗證模式,Base64的加密算法是可逆的,你知道上面的原理,分分鐘就破解掉。我們完全可以使用PostMan工具,發送Http請求進行登錄驗證。

- 課程內容介紹
- 源碼與技術交流
- 作者其他作品推薦
- vue深入淺出系列
- 手摸手教你學Spring Boot
- 實戰前后端分離RBAC權限管理系統
- 實戰SpringCloud微服務從青銅到王者
- 第一章 spring security基礎篇
- 1.1.spring-security簡介并與shiro對比
- 1.2.需求分析與基礎環境準備
- 1.3.HttpBasic模式登錄認證
- 1.4.PasswordEncoder介紹
- 1.5.formLogin模式登錄認證
- 1.6.源碼解析登錄驗證流程
- 1.7.自定義登錄驗證結果處理
- 1.8.session會話的管理
- 1.9.同賬號多端登錄踢下線
- 第二章 認證授權鑒權功能深入
- 2.1.1.RBAC權限管理模型
- 2.1.2.結合真實系統講解RBAC實現
- 2.2.動態加載用戶角色權限數據
- 2.3.動態加載資源鑒權規則
- 2.4.權限表達式使用方法總結
- 2.5.RememberMe記住我功能
- 2.6.退出登錄功能的實現
- 2.7.多次登錄失敗賬戶鎖定
- 2.8.多種圖片驗證碼實現方案
- 2.9.基于session的圖片驗證碼實現
- 2.10.短信驗證碼登錄功能
- 第三章 集群單點登錄方案介紹
- 3.1.單點登錄與狀態共享方案
- 3.2.基于session共享登陸方案
- 3.3.CAS認證服務器搭建
- 3.4.CAS動態加載用戶密碼數據
- 3.5.CAS資源服務器搭建
- 第四章 前后端分離的應用認證
- 4.1.詳述JWT使用場景及結構安全
- 4.2.Spring Security-JWT實現原理
- 4.3.編碼實現JWT認證鑒權
- 4.4.解決跨域訪問的問題
- 4.5.CSRF跨站攻擊防護
- 4.6.JWT集群應用方案
- 第五章 Spring-Security-OAuth2項目
- 5.1.OAuth2授權標準簡介
- 5.2.Spring與OAuth2發展路線圖
- 5.3.實現授權碼模式認證服務器
- 5.4.實現其它三種模式認證服務器
- 5.5.AccessToken令牌的刷新
- 5.6.編碼實現資源服務器
- 5.7.認證資源服務器分離
- 5.8.認證資源服務整合JWT
- 5.9.Client信息持久化存儲
- 第六章 SpringSocial社交登錄
- 6.1.SpringSocia源碼分析
- 6.2.QQ互聯注冊及應用創建
- 6.3.實現QQ登錄功能
- 6.4.QQ登錄功能細節處理
- 6.5.QQ登錄用戶關系綁定
- 附錄一:抽取公共資源為獨立模塊
- 附錄二:OAuth-server數據庫表