首页 > 编程语言 > 详细

前后端分离的Web应用程序中使用Spring Security+Mybatis+JWT非对称加密+动态权限管理(七):生成令牌和读取令牌中的信息

时间:2021-06-10 11:45:56      阅读:24      评论:0      收藏:0      [点我收藏+]

1、首先制作一个签名文件。在命令中输入:keytool -genkey -alias jwt.jks -keyalg RSA -validity 365 -keystore jwt.jks,然后根据提示输入相应的信息,其中输密码时不会显示任何东西,继续输完密码即可,命令中的365是指有效期天数。文件生成成功后,在C:\users\你的计算机登录名,这个文件夹里就生成了jwt.jks这个文件,将它复制到项目目录resource文件夹下。

技术分享图片

2、编写生成token和读取token的类:

技术分享图片
package com.security;

import java.io.InputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Date;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

public class JwtTokenUtils {
    //加载jwt.jks文件
    private static InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("jwt.jks");
    private static PrivateKey privateKey = null;
    private static PublicKey publicKey = null;

    static {
        try {
            KeyStore keyStore = KeyStore.getInstance("JKS");
            keyStore.load(inputStream, "123456".toCharArray()); //123456是制作jwt.jks文件时输入的密码
            privateKey = (PrivateKey) keyStore.getKey("jwt", "123456".toCharArray());
            publicKey = keyStore.getCertificate("jwt").getPublicKey();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static String generateToken(String subject, int expirationSeconds) { //根据用户名(subject)和指定的有效时间生成令牌
        return Jwts.builder()
                .setClaims(null)
                .setSubject(subject)
                .setExpiration(new Date(System.currentTimeMillis() + expirationSeconds * 1000))
                .signWith(SignatureAlgorithm.RS256, privateKey)
                .compact();
    }

    public static String parseToken(String token) {  //从令牌中读取subject,即用户名
        String subject = null;
        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(publicKey)
                    .parseClaimsJws(token).getBody();
            subject = claims.getSubject();
        } catch (Exception e) {
        }
        return subject;
    }

}
View Code

 

前后端分离的Web应用程序中使用Spring Security+Mybatis+JWT非对称加密+动态权限管理(七):生成令牌和读取令牌中的信息

原文:https://www.cnblogs.com/wwwzgy/p/14870083.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!