Springboot 生成JWT

一、引入依赖

         <!--JWT-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>

二、JWT工具类

package com.party.util;

import com.alibaba.fastjson.util.IOUtils;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.core.io.ClassPathResource;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Map;
import java.util.UUID;

/**
 * author: Dragon Wu
 * date: 2022-07-10 14:05
 */

public class JwtUtils {

    private static final Long EXPIRE= (long) 24 * 60 * 60 * 1000;

    private static final String JWT_ID= UUID.randomUUID().toString();

    //私钥
    private static final String KEY=getSecretKey();

    /**
     * 将Map对象放入JWT的payload里,生成JWT
     * @param body 非敏感数据
     * @return String JWT
     */
    public static String createJWT(Map<String,Object> body){
        JwtBuilder jwtBuilder= Jwts.builder()
                .setId(JWT_ID)//JWT的唯一身份标识
                .signWith(SignatureAlgorithm.HS256,KEY)
                .setClaims(body)//放置body数据
                .setIssuedAt(new Date())//签发时间
                .setExpiration(new Date(System.currentTimeMillis()+EXPIRE));//过期时间
        return jwtBuilder.compact();
    }

    /**
     * 解析JWT
     * @param jwt JWT字符串
     * @return Map 返回Claims里的内容
     */
    public static Map<String, Object> parseJwt(String jwt) throws Exception{
        return Jwts.parser().setSigningKey(KEY).parseClaimsJws(jwt).getBody();
    }

    private static String getSecretKey(){
        ClassPathResource classPathResource=new ClassPathResource("app_private_key.pem");
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(classPathResource.getInputStream());
            return IOUtils.readAll(inputStreamReader);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

}

调用createJWT生成JWT,调用parseJWT解析jwt。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!下面是一个使用Spring Boot生成JWT示例代码: 首先,你需要添加以下依赖到你的`pom.xml`文件中: ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.2</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> ``` 接下来,你可以创建一个`JwtUtil`类来生成和验证JWT: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.stereotype.Component; import java.util.Date; @Component public class JwtUtil { private static final String SECRET_KEY = "your-secret-key"; private static final long EXPIRATION_TIME = 86400000; // 24 hours public 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_KEY) .compact(); } public String getUsernameFromToken(String token) { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); return claims.getSubject(); } public boolean validateToken(String token) { try { Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token); return true; } catch (Exception e) { return false; } } } ``` 在上面的代码中,`generateToken`方法用于生成JWT,`getUsernameFromToken`方法用于从JWT中获取用户名,`validateToken`方法用于验证JWT的有效性。 请注意,上述代码中的`SECRET_KEY`是用于签名和验证JWT的密钥,你需要将其替换为你自己的密钥。 希望这个示例代码能够帮助到你!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值