SpringBoot使用JWT生成token,从实体类到mapper到service到controller,请给我写个详细完整的例子
时间: 2024-03-16 19:44:13 浏览: 16
好的,下面是一个完整的 SpringBoot 使用 JWT 生成 token 的例子:
1. 实体类
假设我们有一个 User 实体类,其中包含了用户的 id、用户名和密码等信息。
```java
public class User {
private Integer id;
private String username;
private String password;
// 省略 getter 和 setter
}
```
2. Mapper
我们使用 MyBatis 作为 ORM 框架,所以需要定义一个 UserMapper 接口来操作用户数据。
```java
@Mapper
public interface UserMapper {
User selectByUsername(String username);
}
```
3. Service
在 UserService 中,我们需要实现用户登录的业务逻辑。首先根据用户名查询用户信息,然后判断密码是否正确,最后生成 token 并返回给客户端。
```java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public String login(String username, String password) {
// 根据用户名查询用户信息
User user = userMapper.selectByUsername(username);
if (user == null) {
throw new RuntimeException("用户不存在");
}
// 判断密码是否正确
if (!user.getPassword().equals(password)) {
throw new RuntimeException("密码错误");
}
// 生成 token
Map<String, Object> payload = new HashMap<>();
payload.put("userId", user.getId());
payload.put("username", user.getUsername());
String token = JWT.create()
.withPayload(payload)
.sign(Algorithm.HMAC256("secret"));
return token;
}
}
```
4. Controller
在 UserController 中,我们定义一个 login 接口来处理用户登录请求。客户端在登录时需要传递用户名和密码,我们在服务器端调用 UserService 的 login 方法进行登录验证,并将生成的 token 返回给客户端。
```java
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password) {
String token = userService.login(username, password);
return token;
}
}
```
这样,我们就完成了一个使用 JWT 生成 token 的简单的 SpringBoot 应用。需要注意的是,为了确保 token 的安全性,我们需要在生成 token 时使用一个秘钥来进行签名,这里我们使用了 "secret" 作为秘钥。在实际使用中,需要使用更加复杂的秘钥来确保 token 的安全性。