java实现api接口的token
时间: 2024-01-17 13:04:07 浏览: 133
在 Java 中实现 API 接口的 token 验证可以通过以下步骤进行:
1. 创建一个 TokenUtil 类,用于生成和验证 token。
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import javax.crypto.SecretKey;
import java.util.Date;
public class TokenUtil {
private static final String SECRET_KEY = "your_secret_key_here";
// 生成 token
public static String generateToken(String userId) {
SecretKey key = Keys.hmacShaKeyFor(SECRET_KEY.getBytes());
return Jwts.builder()
.setSubject(userId)
.setExpiration(new Date(System.currentTimeMillis() + 86400000)) // 设置过期时间为一天
.signWith(key)
.compact();
}
// 验证 token
public static boolean validateToken(String token) {
try {
SecretKey key = Keys.hmacShaKeyFor(SECRET_KEY.getBytes());
Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
// 获取 token 中的用户ID
public static String getUserIdFromToken(String token) {
SecretKey key = Keys.hmacShaKeyFor(SECRET_KEY.getBytes());
Claims claims = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
return claims.getSubject();
}
}
```
2. 在需要验证 token 的 API 接口中,使用 TokenUtil 类进行验证。
```java
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
@Path("/api")
public class MyApi {
@GET
@Path("/someEndpoint")
public Response someEndpoint(@QueryParam("token") String token) {
if (TokenUtil.validateToken(token)) {
String userId = TokenUtil.getUserIdFromToken(token);
// 验证通过,执行相应的逻辑
return Response.ok().build();
} else {
// 验证失败,返回错误信息
return Response.status(Response.Status.UNAUTHORIZED).build();
}
}
}
```
在上述代码中,`generateToken` 方法用于生成 token,`validateToken` 方法用于验证 token 的有效性,`getUserIdFromToken` 方法用于从 token 中获取用户ID。在 API 接口中,通过调用 `validateToken` 方法来验证传递的 token,如果验证通过,则可以根据需要执行相应的逻辑。
请注意,上述代码中的 SECRET_KEY 是用于签名和验证 token 的密钥,应该保持安全,并且不应该直接暴露在代码中。可以将其存储在配置文件或环境变量中,并通过相应的方式获取。
阅读全文