使用 Spring Boot 和 Redis 实现用户登录后用户信息存储以及验证使用token当vaule
时间: 2024-03-01 20:52:44 浏览: 115
好的,以下是使用 Spring Boot 和 Redis 实现用户登录后用户信息存储以及验证使用 token 的步骤:
1. 首先需要在 pom.xml 中添加 Redis 相关的依赖,例如:jedis、spring-boot-starter-data-redis 等。
2. 在 application.properties 文件中配置 Redis 相关信息,如下:
```
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
```
3. 创建一个 UserService 类,用于操作 Redis 存储用户信息和 token。具体包括以下方法:
- saveUser(User user):将用户信息存储到 Redis 中。
- getUserById(String id):根据用户 id 从 Redis 中获取用户信息。
- deleteUserById(String id):根据用户 id 从 Redis 中删除用户信息。
- saveToken(String token, String userId):将 token 和用户 id 存储到 Redis 中。
- getUserIdByToken(String token):根据 token 从 Redis 中获取用户 id。
示例代码如下:
```
@Service
public class UserService {
@Autowired
private StringRedisTemplate redisTemplate;
private static final String REDIS_KEY_PREFIX_USER = "user:";
private static final String REDIS_KEY_PREFIX_LOGIN = "login:";
public void saveUser(User user) {
String key = REDIS_KEY_PREFIX_USER + user.getId();
redisTemplate.opsForHash().put(key, "id", user.getId());
redisTemplate.opsForHash().put(key, "username", user.getUsername());
redisTemplate.opsForHash().put(key, "password", user.getPassword());
}
public User getUserById(String id) {
String key = REDIS_KEY_PREFIX_USER + id;
String username = (String) redisTemplate.opsForHash().get(key, "username");
String password = (String) redisTemplate.opsForHash().get(key, "password");
User user = new User();
user.setId(id);
user.setUsername(username);
user.setPassword(password);
return user;
}
public void deleteUserById(String id) {
String key = REDIS_KEY_PREFIX_USER + id;
redisTemplate.delete(key);
}
public void saveToken(String token, String userId) {
redisTemplate.opsForValue().set(REDIS_KEY_PREFIX_LOGIN + token, userId, Duration.ofMinutes(30));
}
public String getUserIdByToken(String token) {
return redisTemplate.opsForValue().get(REDIS_KEY_PREFIX_LOGIN + token);
}
}
```
4. 在登录接口中,验证用户信息是否正确,并将 token 和用户 id 存储到 Redis 中。示例代码如下:
```
@RestController
public class LoginController {
@Autowired
private UserService userService;
@PostMapping("/login")
public String login(@RequestBody User user, HttpServletResponse response) {
// 验证用户信息是否正确
if (!"admin".equals(user.getUsername()) || !"123456".equals(user.getPassword())) {
return "用户名或密码错误";
}
// 将 token 和用户 id 存储到 Redis 中
String token = UUID.randomUUID().toString();
userService.saveToken(token, user.getId());
// 将 token 存储到 Cookie 中
Cookie cookie = new Cookie("token", token);
cookie.setMaxAge(30 * 60);
cookie.setPath("/");
response.addCookie(cookie);
return "登录成功";
}
}
```
5. 在需要验证用户信息的接口中,从 Redis 中获取用户信息,并验证用户是否已登录。示例代码如下:
```
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user")
public String getUser(@RequestParam String userId, HttpServletRequest request) {
// 从 Redis 中获取用户信息
User user = userService.getUserById(userId);
if (user == null) {
return "用户不存在";
}
// 验证用户是否已登录
String token = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if ("token".equals(cookie.getName())) {
token = cookie.getValue();
break;
}
}
}
if (token == null) {
return "用户未登录";
}
String loginUserId = userService.getUserIdByToken(token);
if (!userId.equals(loginUserId)) {
return "用户未登录";
}
// TODO:返回用户信息
}
}
```
以上就是使用 Spring Boot 和 Redis 实现用户登录后用户信息存储以及验证使用 token 的步骤。
阅读全文