JWT工具类 & 登录接口
JWT工具类 & 登录接口
一、核心知识点
- JWT:JSON Web Token,无状态认证。
- JJWT:Java实现JWT的库。
- @Value:注入配置文件中的值。
二、操作步骤
1. 打开
pom.xml文件,添加JJWT依赖,添加的内容和位置如下:<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency>

添加完之后,点右上角的刷新。
2. 打开application.yml文件,添加JWT配置参数
内容和位置如下:
jwt: secret: weitoutiao_secret_key_2025 expire: 604800000 # 7天毫秒数

3. 创建
JwtUtil
- 右键
com.weitoutiao文件夹,新建java类:util.JwtUtil

内容如下:
package com.weitoutiao.util; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Date; @Component public class JwtUtil { @Value("${jwt.secret}") private String secret; @Value("${jwt.expire}") private Long expire; public String generateToken(Integer userId, String username) { Date now = new Date(); Date expiration = new Date(now.getTime() + expire); return Jwts.builder() .setSubject(String.valueOf(userId)) .claim("username", username) .setIssuedAt(now) .setExpiration(expiration) .signWith(SignatureAlgorithm.HS256, secret) .compact(); } public Claims parseToken(String token) { return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); } public Integer getUserIdFromToken(String token) { return Integer.parseInt(parseToken(token).getSubject()); } public boolean validateToken(String token) { try { parseToken(token); return true; } catch (Exception e) { return false; } } }4. 创建登录DTO
- 右键
com.weitoutiao文件夹,新建java类:dto.UserLoginDTO

类中内容如下:
package com.weitoutiao.dto; import lombok.Data; @Data public class UserLoginDTO { private String username; private String password; }5. 创建UserService
- 右键
service文件夹,新建java类:UserService

UserService类中的内容如下:package com.weitoutiao.service; import com.baomidou.mybatisplus.extension.service.IService; import com.weitoutiao.entity.User; public interface UserService extends IService<User> { String login(String username, String password); }在service文件下,右键impl文件夹,新建java类:
UserServiceImpl

UserServiceImpl类中的内容如下:package com.weitoutiao.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.weitoutiao.entity.User; import com.weitoutiao.mapper.UserMapper; import com.weitoutiao.service.UserService; import com.weitoutiao.util.JwtUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private JwtUtil jwtUtil; @Override public String login(String username, String password) { // 1. 创建一个条件构造器(用于构建查询条件) LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); // 2. 添加查询条件:username = 传入的用户名 AND password = 传入的密码 wrapper.eq(User::getUsername, username) .eq(User::getPassword, password); // 3. 执行查询,返回唯一用户(若不存在则返回 null) User user = this.getOne(wrapper); // 4. 如果用户不存在,登录失败,返回 null if (user == null) return null; // 5. 生成 JWT Token,携带用户 id 和 username return jwtUtil.generateToken(user.getId(), user.getUsername()); } }6. 创建
UserController
- 右键
controller文件夹,新建java类:UserController

UserController类中的代码如下:package com.weitoutiao.controller; import com.weitoutiao.common.Result; import com.weitoutiao.dto.UserLoginDTO; import com.weitoutiao.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/login") public Result<String> login(@RequestBody UserLoginDTO dto) { String token = userService.login(dto.getUsername(), dto.getPassword()); if (token != null) { return Result.success(token); } else { return Result.error("用户名或密码错误"); } } }工程目录结构如下:

7.用Postman测试
- 先运行后端,找到启动类,点运行

- 打开Postman,新建一个请求,login,保存


- 打开login,请求方式改为post,地址填:
http://localhost:8080/user/login

更改请求体,选Body,选raw,格式选JSON
请求体内容:
{ "username": "testuser", "password": "123456" }

点击Send
返回的内容如下:


浙公网安备 33010602011771号