項目初始化與基礎配置
創建基礎Spring Boot項目
我們首先創建一個名為ssia-ch2-ex1的空項目(該名稱與配套源碼中的示例項目保持一致)。項目需要添加以下兩個核心依賴:
org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-security
默認安全配置解析
啟動應用時,Spring Boot會自動應用默認安全配置:
- 控制臺會輸出隨機生成的UUID密碼(格式:
Using generated security password: 93a01cf0-794b-4b98-86ef-54860f36f7f3
) - 默認啟用HTTP Basic認證機制
- 內置用戶名為"user"
- 自動保護所有端點
創建測試端點
在controllers包下創建HelloController類:
@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello!";}
}
注意:控制器必須位于主啟動類所在包或其子包下,否則需要顯式配置@ComponentScan
驗證安全行為
未授權訪問測試
使用cURL發起請求:
curl http://localhost:8080/hello
將返回401 Unauthorized響應:
{"status":401,"error":"Unauthorized","message":"Unauthorized","path":"/hello"
}
授權訪問測試
使用默認憑證訪問:
curl -u user:93a01cf0-794b-4b98-86ef-54860f36f7f3 http://localhost:8080/hello
成功返回:
Hello!
HTTP Basic認證原理
cURL的-u
參數實際會生成Base64編碼的Authorization頭,等價于:
curl -H "Authorization: Basic dXNlcjo5M2EwMWNmMC03OTRiLTRiOTgtODZlZi01NDg2MGYzNmY3ZjM=" localhost:8080/hello
可通過以下命令生成Base64憑證:
echo -n user:93a01cf0-794b-4b98-86ef-54860f36f7f3 | base64
安全架構關鍵組件
默認配置包含以下核心組件:
- UserDetailsService:內存存儲用戶憑證
- PasswordEncoder:密碼編解碼器
- AuthenticationProvider:認證邏輯處理器
- SecurityContext:存儲認證后的安全上下文
注意:HTTP Basic認證本身不提供憑證加密,僅進行Base64編碼。生產環境必須配合HTTPS使用。
HTTP Basic認證深度解析
cURL工具認證原理剖析
使用cURL的-u
參數實現HTTP Basic認證時,工具會自動完成以下處理流程:
- 將
username:password
格式的憑證字符串進行Base64編碼 - 生成標準的Authorization請求頭:
Basic
- 附加到HTTP請求頭部發送
技術實現等價于:
# 原始憑證
username="user"
password="93a01cf0-794b-4b98-86ef-54860f36f7f3"# Base64編碼處理
encoded=$(echo -n "$username:$password" | base64)# 最終請求頭
Authorization: Basic $encoded
手動構建Authorization頭
通過命令行工具可完整演示認證頭的生成過程:
# 在Linux/Git Bash環境下執行(-n參數避免添加換行符)
echo -n "user:93a01cf0-794b-4b98-86ef-54860f36f7f3" | base64# 輸出結果示例
dXNlcjo5M2EwMWNmMC03OTRiLTRiOTgtODZlZi01NDg2MGYzNmY3ZjM=
生成的Base64字符串可直接用于構造請求: