SpringBoot+Spring Security基于內(nèi)存用戶認(rèn)證的實(shí)現(xiàn)
一、Spring Security框架
1. 框架簡介
官方介紹:Spring Security是一個(gè)功能強(qiáng)大且可高度自定義的身份驗(yàn)證和訪問控制框架。它是保護(hù)基于Spring的應(yīng)用程序的事實(shí)標(biāo)準(zhǔn)。 Spring Security是一個(gè)專注于為Java應(yīng)用程序提供身份驗(yàn)證和授權(quán)的框架。與所有Spring項(xiàng)目一樣,Spring Security的真正強(qiáng)大之處在于它可以輕松擴(kuò)展以滿足自定義要求。
Spring Security是一個(gè)為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方式的安全框架(簡單說是對訪問權(quán)限進(jìn)行控制),應(yīng)用的安全性包括用戶認(rèn)證(Authentication)和用戶授權(quán)(Authorization)兩個(gè)部分。Spring Security的主要核心功能為 認(rèn)證和授權(quán),所有的架構(gòu)也是基于這兩個(gè)核心功能去實(shí)現(xiàn)的。
- 用戶認(rèn)證指的是驗(yàn)證某個(gè)用戶是否為系統(tǒng)中的合法主體,也就是說用戶能否訪問該系統(tǒng)。用戶認(rèn)證一般要求用戶提供用戶名和密碼。系統(tǒng)通過校驗(yàn)用戶名和密碼來完成認(rèn)證過程。
- 用戶授權(quán)指的是驗(yàn)證某個(gè)用戶是否有權(quán)限執(zhí)行某個(gè)操作。在一個(gè)系統(tǒng)中,不同用戶所具有的權(quán)限是不同的。比如對一個(gè)文件來說,有的用戶只能進(jìn)行讀取,而有的用戶可以進(jìn)行修改。一般來說,系統(tǒng)會為不同的用戶分配不同的角色,而每個(gè)角色則對應(yīng)一系列的權(quán)限。
特征:
- 對身份驗(yàn)證和授權(quán)的全面和可擴(kuò)展的支持
- 防止會話固定,點(diǎn)擊劫持,跨站點(diǎn)請求偽造等攻擊
- Servlet API集成
- 可選與Spring Web MVC集成
2. 框架原理
想要對對Web資源進(jìn)行保護(hù),最好的辦法莫過于Filter,要想對方法調(diào)用進(jìn)行保護(hù),最好的辦法莫過于AOP。所以Spring Security在我們進(jìn)行用戶認(rèn)證以及授予權(quán)限的時(shí)候,通過各種各樣的攔截器來控制權(quán)限的訪問,從而實(shí)現(xiàn)安全。
Spring Security 框架的主要過濾器(Filter) :
- WebAsyncManagerIntegrationFilter
- SecurityContextPersistenceFilter
- HeaderWriterFilter
- CorsFilter
- LogoutFilter
- RequestCacheAwareFilter
- SecurityContextHolderAwareRequestFilter
- AnonymousAuthenticationFilter
- SessionManagementFilter
- ExceptionTranslationFilter
- FilterSecurityInterceptor
- UsernamePasswordAuthenticationFilter
- BasicAuthenticationFilter
Spring Security框架的核心組件:
- SecurityContextHolder:提供對SecurityContext的訪問
- SecurityContext:持有Authentication對象和其他可能需要的信息
- AuthenticationManager 其中可以包含多個(gè)AuthenticationProvider
- ProviderManager對象為AuthenticationManager接口的實(shí)現(xiàn)類
- AuthenticationProvider 主要用來進(jìn)行認(rèn)證操作的類 調(diào)用其中的authenticate()方法去進(jìn)行認(rèn)證操作
- Authentication:Spring Security方式的認(rèn)證主體
- GrantedAuthority:對認(rèn)證主題的應(yīng)用層面的授權(quán),含當(dāng)前用戶的權(quán)限信息,通常使用角色表示
- UserDetails:構(gòu)建Authentication對象必須的信息,可以自定義,可能需要訪問DB得到
- UserDetailsService:通過username構(gòu)建UserDetails對象,通過loadUserByUsername根據(jù)userName獲取UserDetail對象 (可以在這里基于自身業(yè)務(wù)進(jìn)行自定義的實(shí)現(xiàn) 如通過數(shù)據(jù)庫,xml,緩存獲取等)
二、SpringBoot 整合Spring Security
1. 項(xiàng)目環(huán)境
(1)JDK版本:1.8
(2)Spring Boot:2.1.2.RELEASE
(3)Spring Security 5.1.3
(4)IntelliJ IDEA 2016.3.4
2. 添加依賴并配置
在pom.xml文件中添加Spring Security的依賴:
<!--Spring Security--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency
在application.yml中配置Spring Security的用戶名密碼:
server:
port: 8082
# spring security
spring:
security:
user:
name: ouyang
password: 1234563. 編寫Controller
package com.oycbest.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author: oyc
* @Date: 2019/1/29 10:49
* @Description: Hello 測試控制類
*/
@RestController
public class HelloController {
@GetMapping("hello")
public String hello(HttpServletRequest request, HttpServletResponse response) throws Exception {
return "hello";
}
}三、測試效果

到此這篇關(guān)于SpringBoot+Spring Security基于內(nèi)存用戶認(rèn)證的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot Spring Security內(nèi)存用戶認(rèn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot集成Spring Security實(shí)現(xiàn)JWT認(rèn)證的步驟詳解
- SpringBoot集成Spring security JWT實(shí)現(xiàn)接口權(quán)限認(rèn)證
- SpringBoot+SpringSecurity實(shí)現(xiàn)基于真實(shí)數(shù)據(jù)的授權(quán)認(rèn)證
- springboot+springsecurity如何實(shí)現(xiàn)動態(tài)url細(xì)粒度權(quán)限認(rèn)證
- SpringBoot整合SpringSecurity實(shí)現(xiàn)JWT認(rèn)證的項(xiàng)目實(shí)踐
- SpringBoot+SpringSecurity+JWT實(shí)現(xiàn)系統(tǒng)認(rèn)證與授權(quán)示例
- SpringBoot security安全認(rèn)證登錄的實(shí)現(xiàn)方法
- SpringBoot整合SpringSecurity實(shí)現(xiàn)認(rèn)證攔截的教程
- SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證
相關(guān)文章
Java利用布隆過濾器實(shí)現(xiàn)快速檢查元素是否存在
布隆過濾器是一個(gè)很長的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。布隆過濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中。本文就來詳細(xì)說說實(shí)現(xiàn)的方法,需要的可以參考一下2022-10-10
解決rocketmq-spring-boot-starter導(dǎo)致的多消費(fèi)者實(shí)例重復(fù)消費(fèi)問題
這篇文章主要介紹了解決rocketmq-spring-boot-starter導(dǎo)致的多消費(fèi)者實(shí)例重復(fù)消費(fèi)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
springboot項(xiàng)目中引入本地依賴jar包并打包到lib文件夾中
這篇文章主要介紹了springboot項(xiàng)目中引入本地依賴jar包,如何打包到lib文件夾中,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
java書店系統(tǒng)畢業(yè)設(shè)計(jì) 用戶模塊(3)
這篇文章主要介紹了java書店系統(tǒng)畢業(yè)設(shè)計(jì),第三步系統(tǒng)總體設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Java語言實(shí)現(xiàn)Blowfish加密算法完整代碼分享
這篇文章主要介紹了Java語言實(shí)現(xiàn)Blowfish加密算法完整代碼分享,簡單介紹了blowfish加密算法,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11

