Java的新項目學成在線筆記-day16(九)

3.6.3 JWT入門
Spring Security 提供對JWT的支持,本節咱們使用Spring Security 提供的JwtHelper來建立JWT令牌,校驗JWT令牌 等操做。 3.6.3.1 生成私鑰和公鑰
JWT令牌生成採用非對稱加密算法
一、生成密鑰證書 下邊命令生成密鑰證書,採用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
二、導出公鑰 openssl是一個加解密工具包,這裏使用openssl來導出公鑰信息。
安裝 openssl:http://slproweb.com/products/Win32OpenSSL.html
安裝資料目錄下的Win64OpenSSL-1_1_0g.exe 配置openssl的path環境變量,本教程配置在D:\OpenSSL-Win64\bin
cmd進入xc.keystore文件所在目錄執行以下命令:
[mw_shl_code=applescript,true]keytool ‐list ‐rfc ‐‐keystore xc.keystore | openssl x509 ‐inform pem ‐pubkey [/mw_shl_code]
輸入密鑰庫密碼:
Java的新項目學成在線筆記-day16(九)
下邊這一段就是公鑰內容:
-----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令牌的生成與驗證。html

[mw_shl_code=applescript,true]//生成一個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);   }  
[/mw_shl_code]
相關文章
相關標籤/搜索