Spring Boot结合MyBatis-Plus和JWT快速入门:登录和注册示例
在现代Web应用中,用户认证是一个重要的功能。结合Spring Boot、MyBatis-Plus和JWT(JSON Web Token)可以快速构建出安全可靠的登录和注册系统。本文将带您一步步实现这一功能,同时利用Hutool包下的JWTUtil来简化JWT的处理。
1. 环境准备
首先,确保您已经准备好以下环境:
- Java 17
- Spring Boot 3.x
- MyBatis-Plus
- Hutool
2. 登录和注册功能
2.1 创建用户表
使用MyBatis-Plus创建一个用户表,包括用户ID、用户名和密码等字段。
2.2 编写控制器
创建一个控制器,处理用户注册和登录的请求。
@RestController
public class AuthController {
@Autowired
private UserService userService;
@PostMapping("/register")
public ResponseEntity<String> register(@RequestBody User user) {
userService.register(user);
return ResponseEntity.ok("注册成功");
}
@PostMapping("/login")
public ResponseEntity<String> login(@RequestBody User user) {
User storedUser = userService.findByUsername(user.getUsername());
if (storedUser != null && storedUser.getPassword().equals(user.getPassword())) {
// 生成JWT并返回
String token = JWTUtil.createToken(storedUser.getId());
return ResponseEntity.ok(token);
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
}
}
2.3 编写Service和Mapper
编写UserService和UserMapper来处理用户数据的操作。
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void register(User user) {
userMapper.insert(user);
}
public User findByUsername(String username) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("username", username);
return userMapper.selectOne(queryWrapper);
}
}
2.4 JWTUtil
使用Hutool的JWTUtil来生成和解析JWT。
public class JWTUtil {
private static final String SECRET_KEY = "your-secret-key";
private static final long EXPIRATION_TIME = 86400 * 1000; // 24小时
public static String createToken(Long userId) {
return JWT.create()
.withClaim("userId", userId)
.withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.sign(Algorithm.HMAC256(SECRET_KEY));
}
public static Long getUserIdFromToken(String token) {
DecodedJWT decodedJWT = JWT.decode(token);
return decodedJWT.getClaim("userId").asLong();
}
public static boolean validateToken(String token) {
try {
JWT.require(Algorithm.HMAC256(SECRET_KEY)).build().verify(token);
return true;
} catch (Exception e) {
return false;
}
}
}
3. 测试
使用Postman等工具测试注册和登录接口,确保JWT生成和验证功能正常。
结论
结合Spring Boot、MyBatis-Plus和Hutool的JWTUtil,您可以快速构建出安全可靠的登录和注册系统。JWT提供了一种无状态的认证机制,适用于分布式应用。同时,MyBatis-Plus能够简化数据库操作,让开发过程更高效。