Spring Boot结合MyBatis-Plus和JWT快速入门:登录和注册示例 | 青训营

524 阅读2分钟

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能够简化数据库操作,让开发过程更高效。