Java写一个用户登录jwt验证代码
时间: 2023-03-02 07:25:20 浏览: 124
好的,以下是使用Java编写的JWT用户登录验证代码的示例:
```
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JwtUtils {
private static final String SECRET_KEY = "your-secret-key"; // 用于签名的密钥
private static final long EXPIRATION_TIME = 86400000; // 过期时间,这里设置为24小时
// 生成JWT令牌
public static String generateToken(String username) {
Date now = new Date();
Date expiration = new Date(now.getTime() + EXPIRATION_TIME);
Map<String, Object> claims = new HashMap<>();
claims.put("username", username);
return Jwts.builder()
.setClaims(claims)
.setIssuedAt(now)
.setExpiration(expiration)
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
// 验证JWT令牌
public static boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
// 从JWT令牌中获取用户名
public static String getUsernameFromToken(String token) {
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody().get("username").toString();
}
}
```
使用该类生成JWT令牌的示例代码:
```
String token = JwtUtils.generateToken("username");
System.out.println(token);
```
验证JWT令牌并获取用户名的示例代码:
```
String token = "your-jwt-token";
boolean valid = JwtUtils.validateToken(token);
if (valid) {
String username = JwtUtils.getUsernameFromToken(token);
System.out.println("Username: " + username);
} else {
System.out.println("Invalid token");
}
```
需要注意的是,由于涉及到安全性问题,这里使用的是对称加密算法HS256,如果需要更高级的安全措施,可以使用非对称加密算法。另外,生成JWT令牌时可以添加更多的自定义声明,根据实际情况进行调整。
阅读全文