使用 Java 生成和使用 JWT Token

本指南介绍了如何在 Java 中生成和使用 JSON Web Token (JWT) 进行安全认证。

1. 生成 JWT Token

可以使用 Java 中的 JWT 库,例如 Java-JWT 或者 Nimbus-Jose-JWT,来生成 JWT Token。以下示例使用 Java-JWT 库生成一个 10 天有效期的 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 天
    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();
    }
}

该代码使用 HS512 算法对 Token 进行签名,并设置了一个 10 天的过期时间。SECRET 是一个保密字符串,需要妥善保管,以防止被恶意使用。

2. 将 Token 放入请求头

可以使用 Java 中的网络库,例如 HttpURLConnection 或者 OkHttp,将 Token 放入请求头。以下示例使用 HttpURLConnection 将 Token 放入请求头:

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) {
            // 处理成功响应
            // ...
        } else {
            // 处理错误响应
            // ...
        }

        con.disconnect();
    }
}

代码中使用 con.setRequestProperty(AUTHORIZATION_HEADER, BEARER_PREFIX + token) 将 Token 放入请求头的 Authorization 字段中。

3. 解析 Token

可以使用 Java-JWT 库解析 Token,提取其中的信息。以下示例使用 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();
    }
}

该代码使用 Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token).getBody() 解析 Token,并通过 claims.getSubject() 获取其中的用户名。如果 Token 无效或已过期,将会抛出异常。

总结

本文介绍了如何在 Java 中使用 JWT 库生成和使用 JWT Token,以及如何将 Token 放入请求头和解析 Token 内容。JWT 是一种安全可靠的认证方式,适用于各种应用场景。

Java 生成和使用 JWT Token:从创建到解析

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

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