生成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无效或者已过期,将抛出异常

java 如何生成token并将token放到请求header中以及如何获取token

原文地址: https://www.cveoy.top/t/topic/fyKb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录