工-具-类:

Jwt:

1.概念:
    一种紧凑和自包含的方式,它用于各方之间作为JSON对象安全地传输信息

2.组成:
   分别是Header、payload、signature;

3.Header:
    `alg`属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256);
    `typ`属性表示这个令牌(token)的类型(type),JWT 令牌统一写为`JWT`。
     最后,将上面的 JSON 对象使用 Base64URL 算法(详见后文)转成字符串。

4.Payload: 
      部分也是一个 JSON 对象,用来存放实际需要传递的数据。

5.Signature:

​    它是由3个部分组成,先是用 Base64 编码的 header 和 payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端。secret就是在最后第二次加密时加的盐,算是一个秘钥(只保留在服务器),不向外部透露。

6.导包:
       <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.10.3</version>
        </dependency>

7.yml文件:
  
    #设置Jwt的密钥
    jwt.securt=qf_live
    #设置签发人
    jwt.issuer=zhangdeshaui
    #设置主题
    jwt.subject=zhangdeshaui

7.代码:
@Component
public class JWTUtils {

    //设置公钥信息
    @Value("${jwt.securt}")
    private String srcurt;
    //获取签发人
    @Value("${jwt.issuer}")
    private String issuer;
    //获取主题
    @Value("${jwt.subject}")
    private String subject;



    //加密的方法
    public String createToken(LiveUser liveUser){
        //1.设置加密的算法,以及密钥
        Algorithm algorithm = Algorithm.HMAC256(srcurt);
        //2.我们需要设置头部信息
        Map map = new HashMap<>();
        map.put("alg","HS256");
        map.put("typ","JWT");
        //3.生成token串
        String token = JWT.create().withHeader(map)
                .withIssuer(issuer)//签发人
                .withIssuedAt(new Date())//生成时间
                .withSubject(subject)//主题
                .withClaim("username", liveUser.getLoginName())
                .sign(algorithm);//加密,以及算法
        return token;
    }

    //解密的方法

    public  String verfiyToken(String token) {
        //1.设置加密的算法,以及密钥
        Algorithm algorithm1 = Algorithm.HMAC256(srcurt);
        JWTVerifier verifier = JWT.require(algorithm1).withIssuer(issuer).build();
        try {
           
            DecodedJWT verify = verifier.verify(token);
            //获取到自定义的内容
            Claim username = verify.getClaim("username");
           return username.asString();
        }catch (Exception e){
            System.out.println(e.getMessage());
            return null;
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值