spring提供的JwtHelper生成JWT令牌原理,使用RSA签名算法

生成令牌

//生成一个jwt令牌 
@Test public void testCreateJwt(){ 
	//证书文件 
	String key_location = "xc.keystore"; 
	//密钥库密码 
	String keystore_password = "xuechengkeystore"; 
	//访问证书路径 
	ClassPathResource resource = new ClassPathResource(key_location); 
	//密钥工厂 
	KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(resource, keystore_password.toCharArray()); 
	//密钥的密码,此密码和别名要匹配
	String keypassword = "xuecheng"; 
	//密钥别名 
	String alias = "xckey"; 
	//密钥对(密钥和公钥) 
	KeyPair keyPair = keyStoreKeyFactory.getKeyPair(alias,keypassword.toCharArray()); 
	//私钥 
	RSAPrivateKey aPrivate = (RSAPrivateKey) keyPair.getPrivate(); 
	//定义payload信息 
	Map<String, Object> tokenMap = new HashMap<>(); 
	tokenMap.put("id", "123"); 
	tokenMap.put("name", "mrt"); 
	tokenMap.put("roles", "r01,r02"); 
	tokenMap.put("ext", "1"); 
	//生成jwt令牌 
	Jwt jwt = JwtHelper.encode(JSON.toJSONString(tokenMap), new RsaSigner(aPrivate)); 
	//取出jwt令牌 
	String token = jwt.getEncoded(); 
	System.out.println("token="+token); 
}

校验令牌

@Test 
public void testVerify(){ 
	//jwt令牌 
	String token ="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHQiOiIxIiwicm9sZXMiOiJyMDEscjAyIiwibmFtZSI6Im1ydCIsI mlkIjoiMTIzIn0.KK7_67N5d1Dthd1PgDHMsbi0UlmjGRcm_XJUUwseJ2eZyJJWoPP2IcEZgAU3tUaaKEHUf9wSRwaDgwhrw fyIcSHbs8oy3zOQEL8j5AOjzBBs7vnRmB7DbSaQD7eJiQVJOXO1QpdmEFgjhc_IBCVTJCVWgZw60IEW1_Lg5tqaLvCiIl26K 48pJB5f‐le2zgYMzqR1L2LyTFkq39rG57VOqqSCi3dapsZQd4ctq95SJCXgGdrUDWtD52rp5o6_0uq‐ mrbRdRxkrQfsa1j8C5IW2‐T4eUmiN3f9wF9JxUK1__XC1OQkOn‐ZTBCdqwWIygDFbU7sf6KzfHJTm5vfjp6NIA"; 
	//公钥 
	String publickey = "‐‐‐‐‐BEGIN PUBLIC KEY‐‐‐‐‐ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAijyxMdq4S6L1Af1rtB8SjCZHNgsQG8JTfGy55eYvzG0B/E4AudR2 prSRBvF7NYPL47scRCNPgLnvbQczBHbBug6uOr78qnWsYxHlW6Aa5dI5NsmOD4DLtSw8eX0hFyK5Fj6ScYOSFBz9cd1nNTvx 2+oIv0lJDcpQdQhsfgsEr1ntvWterZt/8r7xNN83gHYuZ6TM5MYvjQNBc5qC7Krs9wM7UoQuL+s0X6RlOib7/mcLn/lFLsLD dYQAZkSDx/6+t+1oHdMarChIPYT1sx9Dwj2j2mvFNDTKKKKAq0cv14Vrhz67Vjmz2yMJePDqUi0JYS2r0iIo7n8vN7s83v5u OQIDAQAB‐‐‐‐‐END PUBLIC KEY‐‐‐‐‐"; 
	//校验
	jwt Jwt jwt = JwtHelper.decodeAndVerify(token, new RsaVerifier(publickey));
	//获取jwt原始内容 
	String claims = jwt.getClaims(); 
	//jwt令牌 
	String encoded = jwt.getEncoded(); 
	System.out.println(encoded); 
}

校验成功返回claims中封装的json串,校验失败抛出异常;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

干饭两斤半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值