springboot编写用户服务令牌功能,令牌token过期时间设置为两分钟
时间: 2023-10-24 11:19:03 浏览: 86
springboot-oauth2-jwt-example:通过JWT令牌学习Oauth2
好的,您可以按照以下步骤在Spring Boot中编写用户服务令牌功能,并设置过期时间为两分钟:
1. 添加依赖
在pom.xml中添加以下依赖:
```
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
2. 创建Token工具类
创建一个Token工具类来生成和验证JWT令牌。您可以使用以下代码:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class JwtTokenUtil {
private static final String SECRET = "mySecret";
private static final long EXPIRATION_TIME = 120000; // 2 minutes
public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS512, SECRET)
.compact();
}
public static String getUsernameFromToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(SECRET)
.parseClaimsJws(token)
.getBody();
return claims.getSubject();
}
public static boolean validateToken(String token, String username) {
String usernameFromToken = getUsernameFromToken(token);
return (usernameFromToken.equals(username) && !isTokenExpired(token));
}
private static boolean isTokenExpired(String token) {
Date expiration = Jwts.parser()
.setSigningKey(SECRET)
.parseClaimsJws(token)
.getBody()
.getExpiration();
return expiration.before(new Date());
}
}
```
在上面的代码中,`generateToken`方法用于生成JWT令牌,`getUsernameFromToken`方法用于从令牌中获取用户名,`validateToken`方法用于验证令牌是否有效,`isTokenExpired`方法用于检查令牌是否过期。
3. 创建登录接口
创建一个登录接口,该接口将用户名和密码作为输入,并使用上面的Token工具类生成JWT令牌。您可以使用以下代码:
```java
@RestController
public class LoginController {
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody User user) {
// Check if user exists in the database
// ...
// Generate JWT token
String token = JwtTokenUtil.generateToken(user.getUsername());
// Return token
return ResponseEntity.ok(new JwtResponse(token));
}
}
```
在上面的代码中,`JwtResponse`是一个简单的POJO类,用于返回JWT令牌。
4. 创建受保护的接口
创建一个受保护的接口,该接口只能由已经登录并具有有效JWT令牌的用户访问。您可以使用以下代码:
```java
@RestController
public class UserController {
@GetMapping("/users")
public ResponseEntity<?> getUsers(@RequestHeader("Authorization") String authorizationHeader) {
String token = authorizationHeader.substring(7); // Remove "Bearer " prefix
String username = JwtTokenUtil.getUsernameFromToken(token);
// Check if user exists in the database
// ...
// Return user list
return ResponseEntity.ok(users);
}
}
```
在上面的代码中,`@RequestHeader("Authorization")`注解用于获取JWT令牌,`JwtTokenUtil.getUsernameFromToken`方法用于从令牌中获取用户名,并检查该用户是否存在于数据库中。
这就是在Spring Boot中编写用户服务令牌功能的基本步骤,令牌token过期时间已设置为两分钟。
阅读全文