用java实现token登录验证
时间: 2023-10-01 07:03:21 浏览: 99
java实现登录密码验证
好的,以下是Java实现的基于 Token 的身份验证示例代码:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class TokenUtils {
// 密钥
private static final String SECRET_KEY = "this_is_a_secret_key";
// Token 过期时间为 1 小时
private static final long EXPIRATION_TIME = 3600000;
// 生成 Token
public static String generateToken(String username) {
Date now = new Date();
Date expirationTime = new Date(now.getTime() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expirationTime)
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
}
// 验证 Token
public static String verifyToken(String token) {
try {
Claims claims = Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();
return claims.getSubject();
} catch (ExpiredJwtException e) {
// Token 过期
return null;
} catch (Exception e) {
// Token 无效
return null;
}
}
}
```
在上面的示例中,使用了 `io.jsonwebtoken` 库生成和验证 Token。在生成 Token 时,设置了 Token 的主题、签发时间和过期时间,并使用了 HS512 签名算法对 Token 进行签名。在验证 Token 时,使用相同的密钥对 Token 进行解码,如果 Token 无效或已过期,则返回 null。
使用示例:
```java
public static void main(String[] args) {
String token = TokenUtils.generateToken("testUser");
System.out.println(token);
String username = TokenUtils.verifyToken(token);
System.out.println(username);
}
```
输出结果为:
```
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0VXNlciIsImlhdCI6MTYyNzI4MDY2NCwiZXhwIjoxNjI3Mjg0MjY0fQ.4xJyZKJYAm-0b1oVzGm3WJsFQFVz2OmvO5NjZ5R9tXO9ez1f2xv3fH5D5SdFcBcZG0Jn4vAkDj2qrxHhUqlaQ
testUser
```
阅读全文