使用Jwt生成token,请给我写个详细完整的例子,从实体类到mapper到service到controller,谢谢
时间: 2024-03-16 20:42:45 浏览: 104
好的,我可以为你提供一个Java Spring Boot的例子,演示如何使用JWT生成Token。下面是详细的步骤:
1. 创建一个实体类,用于存储用户信息,包括用户名和密码,例如:
```java
public class User {
private String username;
private String password;
// 省略getter和setter方法
}
```
2. 创建一个Mapper接口,用于从数据库中获取用户信息,例如:
```java
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE username = #{username}")
User findByUsername(String username);
}
```
3. 创建一个Service类,用于进行用户验证和生成Token,例如:
```java
@Service
public class UserService {
private UserMapper userMapper;
@Autowired
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public String generateToken(String username, String password) {
User user = userMapper.findByUsername(username);
if (user != null && user.getPassword().equals(password)) {
String token = Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + 3600000))
.signWith(SignatureAlgorithm.HS512, "my-secret-key")
.compact();
return token;
} else {
return null;
}
}
}
```
在这个例子中,我们使用了JJWT库来生成Token。我们通过 `findByUsername` 方法从数据库中获取用户信息,将用户名作为 `sub` 值,将过期时间设置为1小时后,使用HS512算法将Token签名,最后返回Token。
4. 创建一个Controller类,用于处理登录请求,例如:
```java
@RestController
public class LoginController {
private UserService userService;
@Autowired
public LoginController(UserService userService) {
this.userService = userService;
}
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody User user) {
String token = userService.generateToken(user.getUsername(), user.getPassword());
if (token != null) {
return ResponseEntity.ok(token);
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
}
}
```
在这个例子中,我们使用 `@PostMapping` 注解来处理登录请求,并使用 `@RequestBody` 注解将请求体中的JSON转换为User对象。然后,我们调用 `generateToken` 方法来验证用户信息并生成Token,如果验证成功,我们将Token作为响应返回,否则返回401 Unauthorized状态码。
这就是一个简单的使用JWT生成Token的例子,希望能对你有所帮助。
阅读全文