51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Spring Boot项目中使用JWT生成Token

Token {#token}

Token是一种广泛使用的身份验证机制,它代表了一种凭证,通常用于在客户端和服务端之间传递身份验证信息。通常在http请求头中包含token用以验证身份,并在请求结束后返回一个新的token并交由客户端保存。


使用JWT生成Token {#%E4%BD%BF%E7%94%A8jwt%E7%94%9F%E6%88%90token}

Token的形式是多种多样的,生成的方式也具有很多选择性,如何选择取决于应用场景和技术需求。

JWT(Json Web Tokens)具有无状态性、安全性、易于集成等优点,这里选择使用JWT来生成Token。

pom.xml文件中引入JWT的依赖 {#pom.xml%E6%96%87%E4%BB%B6%E4%B8%AD%E5%BC%95%E5%85%A5jwt%E7%9A%84%E4%BE%9D%E8%B5%96}

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt -->
<dependency>
  <groupId>com.auth0</groupId>
  <artifactId>java-jwt</artifactId>
  <version>4.4.0</version>
</dependency>

新建一个Token工具类TokenUtils {#%E6%96%B0%E5%BB%BA%E4%B8%80%E4%B8%AAtoken%E5%B7%A5%E5%85%B7%E7%B1%BBtokenutils}

package cool.tch.util;

/**

* @author denchouka

  • @description TODO

  • @date 2024/10/26 21:07 */ public class TokenUtils {

    /**

    • 生成token

    • @param username 用户名

    • @param ip 用户的ip

    • @return 生成的token */ public static String token(String username, String ip) { return null; }

    /** ``

    • 校验token

    • @param token 请求头中携带的token

    • @return 校验结果 */ public static boolean verify(String token) { return false; } }

生成token的方法 {#%E7%94%9F%E6%88%90token%E7%9A%84%E6%96%B9%E6%B3%95}

/**
 * 生成token
 * @param username 用户名
 * @param ip 用户的ip
 * @return 生成的token
 */
public static String token(String username, String ip) {
    // 参数校验
    if (StringUtils.isBlank(username) || StringUtils.isBlank(ip)) {
        throw new BusinessException("用户名和ip不能为空");
    }
// Header
HashMap&amp;lt;String, Object&amp;gt; header = new HashMap&amp;lt;&amp;gt;(2);
// Token类型
header.put(&quot;typ&quot;,&quot;JWT&quot;);
// 签名算法类型
header.put(&quot;alg&quot;,&quot;HS256&quot;);

try{
    // 生成token签名
    return JWT.create()
            .withHeader(header)
            // 添加声明
            .withClaim(&quot;username&quot;, username)
            .withClaim(&quot;ip&quot;, ip)
            .withClaim(&quot;time&quot;, Instant.now())
            // 加盐
            .withClaim(&quot;salt&quot;, Constant.TOKEN_SECRET_SALT)
            // 1H后过期
            .withExpiresAt(Date.from(Instant.now().plusSeconds(Constant.TOKEN_EXPIRE_DATE)))
            // 密钥
            .sign(Algorithm.HMAC256(Constant.TOKEN_SECRET_KEY));
} catch (Exception e) {
    throw new BusinessException(&quot;生成token失败&quot;);
}

}


校验token的方法 {#%E6%A0%A1%E9%AA%8Ctoken%E7%9A%84%E6%96%B9%E6%B3%95}

/**
 * 校验token
 * @param token 请求头中携带的token
 * @return 校验结果
 */
public static boolean verify(String token) {
// 判空
if (StringUtils.isBlank(token)) {
    return false;
}

// 验证token有效性
try{
    JWTVerifier verifier = JWT.require(Algorithm.HMAC256(Constant.TOKEN_SECRET_KEY)).build();
    verifier.verify(token);
    return true;
} catch (JWTVerificationException e) {
    return false;
}

}



写在最后 {#%E5%86%99%E5%9C%A8%E6%9C%80%E5%90%8E}

以上生成和校验token方法的实现方式不是固定的,可根据自己的业务场景灵活实现。如果项目中使用了Redis等还可以将token存入缓存中,在服务端也保存token。


赞(1)
未经允许不得转载:工具盒子 » Spring Boot项目中使用JWT生成Token