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; } }
前后端分离的Web应用程序中使用Spring Security+Mybatis+JWT非对称加密+动态权限管理(七):生成令牌和读取令牌中的信息
原文:https://www.cnblogs.com/wwwzgy/p/14870083.html