SpringBoot、MySQL、mybatis、Redis分层controller、service、entity、mapper、utils实现用户注册、登录、找回密码功能的代码
时间: 2023-09-25 18:15:29 浏览: 144
为了便于演示,我将代码分为多个文件,按照功能模块划分,具体如下:
1. UserController.java:处理用户相关的请求,包括注册、登录、找回密码等功能。
2. UserService.java:提供用户相关的服务,包括注册、登录、找回密码等功能。
3. UserMapper.java:提供对用户信息的持久化操作。
4. UserEntity.java:定义用户实体类。
5. RedisUtil.java:提供对 Redis 数据库的操作封装。
UserController.java:
```java
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/register")
public Result register(@RequestBody UserEntity user) {
return userService.register(user);
}
@PostMapping("/login")
public Result login(@RequestBody UserEntity user) {
return userService.login(user);
}
@PostMapping("/findPassword")
public Result findPassword(@RequestBody UserEntity user) {
return userService.findPassword(user);
}
}
```
UserService.java:
```java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private RedisUtil redisUtil;
public Result register(UserEntity user) {
// 判断用户名是否已经被注册
UserEntity existUser = userMapper.selectByUsername(user.getUsername());
if (existUser != null) {
return Result.fail("用户名已经被注册!");
}
// 将密码进行加密
user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
// 保存用户信息并返回成功信息
userMapper.insert(user);
return Result.success("注册成功!");
}
public Result login(UserEntity user) {
// 根据用户名获取用户信息
UserEntity existUser = userMapper.selectByUsername(user.getUsername());
if (existUser == null) {
return Result.fail("用户名不存在!");
}
// 验证密码是否正确
String password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
if (!existUser.getPassword().equals(password)) {
return Result.fail("密码错误!");
}
// 生成登录令牌并将其保存到 Redis 中
String token = UUID.randomUUID().toString();
redisUtil.set(token, existUser, 3600);
// 返回登录成功信息及登录令牌
Map<String, Object> data = new HashMap<>();
data.put("token", token);
return Result.success("登录成功!", data);
}
public Result findPassword(UserEntity user) {
// 根据用户名获取用户信息
UserEntity existUser = userMapper.selectByUsername(user.getUsername());
if (existUser == null) {
return Result.fail("用户名不存在!");
}
// 验证密码是否正确
String password = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
if (!existUser.getPassword().equals(password)) {
return Result.fail("密码错误!");
}
// 生成新密码并更新用户信息
String newPassword = UUID.randomUUID().toString().substring(0, 8);
existUser.setPassword(DigestUtils.md5DigestAsHex(newPassword.getBytes()));
userMapper.update(existUser);
// 发送新密码到用户邮箱
// 略...
// 返回成功信息及新密码
Map<String, Object> data = new HashMap<>();
data.put("password", newPassword);
return Result.success("新密码已经发送到您的邮箱,请注意查收!", data);
}
}
```
UserMapper.java:
```java
@Mapper
public interface UserMapper {
UserEntity selectByUsername(String username);
void insert(UserEntity user);
void update(UserEntity user);
}
```
UserEntity.java:
```java
public class UserEntity {
private Integer id;
private String username;
private String password;
private String email;
// getter/setter 略...
}
```
RedisUtil.java:
```java
@Component
public class RedisUtil {
@Autowired
private RedisTemplate redisTemplate;
public void set(String key, Object value, long expire) {
redisTemplate.opsForValue().set(key, value, Duration.ofSeconds(expire));
}
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
public void delete(String key) {
redisTemplate.delete(key);
}
}
```
以上是 Spring Boot、MySQL、MyBatis、Redis 分层实现用户注册、登录、找回密码功能的代码。需要注意的是,代码中的 Redis 配置需要在 application.yml 中进行配置。
阅读全文