satoken集成redis
时间: 2025-01-03 08:40:44 浏览: 148
### 如何实现 Sa-Token 与 Redis 集成
#### 使用场景
在分布式环境中,为了提高性能并保持会话的一致性,通常会选择将 Session 数据存储到集中式的缓存系统中,比如 Redis。对于基于 Spring Cloud 或其他微服务框架构建的应用程序来说,通过引入 Sa-Token 并将其与 Redis 结合起来可以很好地满足这一需求[^1]。
#### 实现步骤概述
#### 添加依赖项
要在项目里集成 Sa-Token 和 Redis 支持,在 `pom.xml` 文件内加入如下 Maven 依赖:
```xml
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>x.x.x</version> <!-- 替换成最新版本号 -->
</dependency>
<!-- 如果使用的是SpringBoot2.x以上,则还需要添加redis starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
#### 配置文件设置
编辑 application.yml (或 .properties),指定 Redis 连接参数以及开启 Sa-Token 对 Redis 的支持:
```yaml
server:
port: 8080
spring:
redis:
host: localhost
port: 6379
sa-token:
token-name: satoken
timeout: 2592000 # Token有效期,默认单位秒(30天)
is-concurrent: true # 是否允许同一账号并发登录
kickout-after-login: false # 登录成功后踢掉之前的token
cache-type: redis # 设置Token的持久化方式为Redis模式
```
#### 自定义 StpLogicImpl 类
创建一个新的 Java 类继承自 `com.baomidou.mybatisplus.core.handlers.SuperMapperHandler` 接口,并重写其中的方法来自定义逻辑处理过程;特别是要覆盖 getLoginId() 方法用于从当前请求上下文中提取用户的唯一标识符[^4]:
```java
import cn.dev33.satoken.stp.StpLogic;
import org.springframework.stereotype.Component;
@Component
public class MyStpLogic extends StpLogic {
@Override
public Object getLoginIdDefault(Object loginType) {
// 返回null表示不拦截任何未登录访问, 可自行修改此行为
return null;
}
}
```
#### 编写测试控制器
最后编写一个简单的 RESTful API 控制器来验证整个流程是否正常工作:
```java
@RestController
@RequestMapping("/api/user")
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@GetMapping("/info")
public Map<String,Object> info(){
HashMap<String, Object> map = new HashMap<>();
Long userId = StpUtil.getLoginIdAsLong();
String username = StpUtil.getLoginIdAsString();
map.put("userId", userId);
map.put("username", username);
return map;
}
@PostMapping("/login")
public void login(@RequestParam String account,@RequestParam String password){
if ("test".equals(account)&& "123456".equals(password)){
StpUtil.login(account);
}else{
throw new RuntimeException("用户名密码错误");
}
}
}
```
上述代码片段展示了如何利用 Sa-Token 提供的功能完成基本的身份验证操作并将用户信息保存至 Redis 中。
阅读全文
相关推荐




















