Spring|Spring Boot 整合 Sa-Token 实现登录认证
今天分享的是 Spring Boot
整合 Sa-Token
实现登录认证。
依赖
首先,我们需要添加依赖:
- 关键依赖:
cn.dev33
sa-token-spring-boot-starter
1.28.0
- 其他依赖:
org.springframework.boot
spring-boot-starter-web
com.fengwenyi
JavaLib
2.1.5
com.fengwenyi
api-result
2.5.1
org.projectlombok
lombok
org.springframework.boot
spring-boot-starter-validation
登录
- 构造用户数据
public class UserData {private static final Map 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 roles;
public User(String uid, String username, String password, List 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 queryRolesByUid(String uid) {
for (Map.Entry entry : users.entrySet()) {
if (uid.equals(entry.getValue().uid)) {
return entry.getValue().roles;
}
}
return null;
}}
- 登录认证
@RestController
@RequestMapping("/auth")
public class AuthController {@PostMapping("/login")
public ResponseTemplate 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);
}}
关键代码
StpUtil.login(user.uid);
LoginResponseVo responseVo = new LoginResponseVo()
.setToken(StpUtil.getTokenValue())
;
- 测试
POST localhost:8080/auth/login{
"username": "u1",
"password": "123456"
}
响应:
{
"code": 0,
"message": "Success",
"success": true,
"body": {
"token": "f2f9a82f-bc6a-460a-877e-9d3e4c8867de"
}
}
退出登录
@RestController
@RequestMapping("/auth")
public class AuthController {@PostMapping("/logout")
public ResponseTemplate logout() {
StpUtil.logout();
return ResponseTemplate.success();
}}
前后端分离 header 添加
satoken
= f2f9a82f-bc6a-460a-877e-9d3e4c8867de
到这里,登录就算完成了,希望今天的分享能够在工作中帮助到你。
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 2018-07-09|2018-07-09 Spring 的DBCP,c3p0
- spring|spring boot项目启动websocket
- Spring|Spring Boot 整合 Activiti6.0.0
- Spring集成|Spring集成 Mina
- springboot使用redis缓存
- Spring|Spring 框架之 AOP 原理剖析已经出炉!!!预定的童鞋可以识别下发二维码去看了
- Spring|Spring Boot之ImportSelector