Java的新项目学成在线笔记-day16(九)

 

3.6.3 JWT入门 
Spring Security 提供对JWT的支持,本节我们使用Spring Security 提供的JwtHelper来创建JWT令牌,校验JWT令牌 等操作。 3.6.3.1 生成私钥和公钥 
JWT令牌生成采用非对称加密算法
1、生成密钥证书 下边命令生成密钥证书,采用RSA 算法每个证书包含公钥和私钥 keytool -genkeypair -alias xckey -keyalg RSA -keypass xuecheng -keystore xc.keystore -storepass xuechengkeystore
Keytool 是一个java提供的证书管理工具 -alias:密钥的别名
-keyalg:使用的hash算法 -keypass:密钥的访问密码 -keystore:密钥库文件名,xc.keystore保存了生成的证书
-storepass:密钥库的访问密码  
查询证书信息:
keytool -list -keystore xc.keystore  
删除别名
keytool -delete -alias xckey -keystore xc.keystore  
2、导出公钥 openssl是一个加解密工具包,这里使用openssl来导出公钥信息。
安装 openssl:http://slproweb.com/products/Win32OpenSSL.html
安装资料目录下的Win64OpenSSL-1_1_0g.exe 配置openssl的path环境变量,本教程配置在D:\OpenSSL-Win64\bin
cmd进入xc.keystore文件所在目录执行如下命令:

[AppleScript] 纯文本查看 复制代码

?

1

keytool ‐list ‐rfc ‐‐keystore xc.keystore | openssl x509 ‐inform pem ‐pubkey


输入密钥库密码:
 
下边这一段就是公钥内容:
-----BEGIN PUBLIC KEY----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAijyxMdq4S6L1Af1rtB8SjCZHNgsQG8JTfGy55eYvzG0B /E4AudR2prSRBvF7NYPL47scRCNPgLnvbQczBHbBug6uOr78qnWsYxHlW6Aa5dI5NsmOD4DLtSw8eX0hFyK5F j6ScYOSFBz9cd1nNTvx2+oIv0lJDcpQdQhsfgsEr1ntvWterZt/8r7xNN83gHYuZ6TM5MYvjQNBc5qC7Krs9wM7U oQuL+s0X6RlOib7/mcLn/lFLsLDdYQAZkSDx/6+t+1oHdMarChIPYT1sx9Dwj2j2mvFNDTKKKKAq0cv14Vrhz67Vj mz2yMJePDqUi0JYS2r0iIo7n8vN7s83v5uOQIDAQAB-----END PUBLIC KEY----
将上边的公钥拷贝到文本文件中,合并为一行。
  3.6.3.2 生成jwt令牌 
在认证工程创建测试类,测试jwt令牌的生成与验证。
 

[AppleScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

//生成一个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);   } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值