SpringBoot整合Sa-Token實(shí)現(xiàn)登錄認(rèn)證的示例代碼
今天分享的是 Spring Boot 整合 Sa-Token 實(shí)現(xiàn)登錄認(rèn)證。
依賴
首先,我們需要添加依賴:
- 關(guān)鍵依賴:
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.28.0</version>
</dependency>- 其他依賴:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.fengwenyi</groupId>
<artifactId>JavaLib</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>com.fengwenyi</groupId>
<artifactId>api-result</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>登錄
- 構(gòu)造用戶數(shù)據(jù)
public class UserData {
private static final Map<String, User> users = Map.of(
"u1", new User("01", "u1", "123456", List.of("ROLE_USER")),
"a2", new User("02", "a2", "123456", List.of("ROLE_ADMIN", "ROLE_USER"))
);
public static class User {
public String uid;
public String username;
public String password;
public List<String> roles;
public User(String uid, String username, String password, List<String> roles) {
this.uid = uid;
this.username = username;
this.password = password;
this.roles = roles;
}
}
public static User queryByUsername(String username) {
return users.get(username);
}
public static List<String> queryRolesByUid(String uid) {
for (Map.Entry<String, User> entry : users.entrySet()) {
if (uid.equals(entry.getValue().uid)) {
return entry.getValue().roles;
}
}
return null;
}
}- 登錄認(rèn)證
@RestController
@RequestMapping("/auth")
public class AuthController {
@PostMapping("/login")
public ResponseTemplate<LoginResponseVo> login(@RequestBody @Validated LoginRequestVo requestVo) {
String username = requestVo.getUsername();
String password = requestVo.getPassword();
UserData.User user = UserData.queryByUsername(username);
if (Objects.isNull(user)) {
return ResponseTemplate.fail("用戶名不正確");
}
if (!user.password.equals(password)) {
return ResponseTemplate.fail("密碼不正確");
}
StpUtil.login(user.uid);
LoginResponseVo responseVo = new LoginResponseVo()
.setToken(StpUtil.getTokenValue())
;
return ResponseTemplate.success(responseVo);
}
}關(guān)鍵代碼
StpUtil.login(user.uid);
LoginResponseVo responseVo = new LoginResponseVo()
.setToken(StpUtil.getTokenValue())
;- 測(cè)試
請(qǐng)求:
POST localhost:8080/auth/login
{
"username": "u1",
"password": "123456"
}響應(yīng):
{
"code": 0,
"message": "Success",
"success": true,
"body": {
"token": "f2f9a82f-bc6a-460a-877e-9d3e4c8867de"
}
}退出登錄
@RestController
@RequestMapping("/auth")
public class AuthController {
@PostMapping("/logout")
public ResponseTemplate<Void> logout() {
StpUtil.logout();
return ResponseTemplate.success();
}
}前后端分離
header 添加
satoken = f2f9a82f-bc6a-460a-877e-9d3e4c8867de
到此這篇關(guān)于SpringBoot整合Sa-Token實(shí)現(xiàn)登錄認(rèn)證的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot Sa-Token登錄認(rèn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Shiro實(shí)現(xiàn)登錄認(rèn)證的方法
- springboot前后端分離集成CAS單點(diǎn)登錄(統(tǒng)一認(rèn)證)
- SpringBoot+Vue+JWT的前后端分離登錄認(rèn)證詳細(xì)步驟
- SpringBoot?實(shí)現(xiàn)CAS?Server統(tǒng)一登錄認(rèn)證的詳細(xì)步驟
- Vue+Jwt+SpringBoot+Ldap完成登錄認(rèn)證的示例代碼
- 基于springboot實(shí)現(xiàn)整合shiro實(shí)現(xiàn)登錄認(rèn)證以及授權(quán)過程解析
- Springboot+Spring Security實(shí)現(xiàn)前后端分離登錄認(rèn)證及權(quán)限控制的示例代碼
- Springboot整合SpringSecurity實(shí)現(xiàn)登錄認(rèn)證和鑒權(quán)全過程
- SpringBoot+MyBatis Plus實(shí)現(xiàn)用戶登錄認(rèn)證
相關(guān)文章
Java中Vector、ArrayList、LinkedList的關(guān)系詳細(xì)解析
這篇文章主要介紹了Java中Vector、ArrayList、LinkedList的關(guān)系詳細(xì)解析,Vector和ArrayList底層均為Object數(shù)組,LinkedList底層是Node節(jié)點(diǎn),Vector是線程安全(底層方法均添加synchronized),ArrayList、LinkedList是線程不安全(無鎖),需要的朋友可以參考下2023-11-11
SpringCloud中的@FeignClient注解使用詳解
在Spring Cloud中使用Feign進(jìn)行服務(wù)間的調(diào)用時(shí),通常會(huì)使用@FeignClient注解來標(biāo)記Feign客戶端接口,這篇文章給大家介紹SpringCloud中的@FeignClient注解使用詳解,感興趣的朋友一起看看吧2025-06-06
Spring MessageSource獲取消息不符合預(yù)期的問題解決方案
最近我參與的產(chǎn)品要做國(guó)際化支持,選擇了用Spring MessageSource來實(shí)現(xiàn),這個(gè)Spring 框架提供的工具使用很簡(jiǎn)單,網(wǎng)上有各種教程文章,這里不做贅述,只說一個(gè)實(shí)際遇到的問題及解決方案,需要的朋友可以參考下2024-01-01
2022年最新java?8?(?jdk1.8u321)安裝圖文教程
這篇文章主要介紹了2022年最新java?8?(?jdk1.8u321)安裝圖文教程,截止2022年1月,官方出的jdk1.8目前已更新到8u321的版本,本文通過圖文并茂的形式給大家介紹安裝過程,需要的朋友可以參考下2022-08-08
Java實(shí)現(xiàn)的時(shí)間戳與date對(duì)象相互轉(zhuǎn)換功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的時(shí)間戳與date對(duì)象相互轉(zhuǎn)換功能,結(jié)合具體實(shí)例形式分析了java日期與時(shí)間戳類型的表示與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Java基于ReadWriteLock開發(fā)高性能的緩存系統(tǒng)
在現(xiàn)代軟件開發(fā)中,緩存技術(shù)被廣泛應(yīng)用于提高應(yīng)用程序的性能和響應(yīng)速度,本文將介紹如何使用??ReadWriteLock??來實(shí)現(xiàn)一個(gè)高效的緩存系統(tǒng),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-08-08

