java 如何生成token并将token放到请求header中以及如何获取token
生成token的方法可以使用Java中的JWT(JSON Web Token)库,例如Java-JWT或者Nimbus-Jose-JWT。以下是使用Java-JWT库生成token的示例代码:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class TokenUtils {
private static final long EXPIRATION_TIME = 864_000_000; // 10 days
private static final String SECRET = "mySecretKey";
public static String generateToken(String username) {
Date now = new Date();
Date expiryDate = new Date(now.getTime() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512, SECRET)
.compact();
}
}
该代码生成一个10天有效期的JWT token,并使用HS512算法对其进行签名。SECRET是一个保密的字符串,需要将其保护起来,以防止被恶意使用。
将token放到请求header中可以使用Java中的HttpURLConnection或者OkHttp等网络库。以下是使用HttpURLConnection将token放到请求header中的示例代码:
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class ApiClient {
private static final String BASE_URL = "https://api.example.com";
private static final String AUTHORIZATION_HEADER = "Authorization";
private static final String BEARER_PREFIX = "Bearer ";
public String getUserProfile(String token) throws IOException {
URL url = new URL(BASE_URL + "/users/profile");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty(AUTHORIZATION_HEADER, BEARER_PREFIX + token);
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
// handle successful response
// ...
} else {
// handle error response
// ...
}
con.disconnect();
}
}
使用上述代码,将token放到请求header中的方法是调用con.setRequestProperty(AUTHORIZATION_HEADER, BEARER_PREFIX + token)。
获取token可以从请求header中解析出来,使用Java-JWT库的解析方法。以下是使用Java-JWT库解析token的示例代码:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
public class TokenUtils {
private static final String SECRET = "mySecretKey";
public static String getUsernameFromToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(SECRET)
.parseClaimsJws(token)
.getBody();
return claims.getSubject();
}
}
该代码解析token并返回其中的用户名。如果token无效或者已过期,将抛出异常
原文地址: https://www.cveoy.top/t/topic/fyKb 著作权归作者所有。请勿转载和采集!