第一步:引入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId> </dependency>
第二步:添加keystore到resources文件夹下
位置为:src\main\resources\app.keystore
src\main\resources\publickey.txt
第三步:配置application.yml
encrypt: key-store: location: classpath:/app.keystore secret: app123 alias: edukey password: edu123
第四步:创建测试类,代码如下:
package com.test; import com.alibaba.fastjson.JSON; import com.xuecheng.auth.UcenterAuthApplication; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.io.ClassPathResource; import org.springframework.security.jwt.Jwt; import org.springframework.security.jwt.JwtHelper; import org.springframework.security.jwt.crypto.sign.RsaSigner; import org.springframework.security.jwt.crypto.sign.RsaVerifier; import org.springframework.security.oauth2.provider.token.store.KeyStoreKeyFactory; import org.springframework.test.context.junit4.SpringRunner; import javax.servlet.ServletOutputStream; import javax.sound.midi.Soundbank; import java.security.KeyPair; import java.security.interfaces.RSAPrivateKey; import java.util.HashMap; import java.util.Map; /** * xxx.keystore * * */ @SpringBootTest(classes = UserAuthApplication.class) @RunWith(SpringRunner.class) public class TestJWT { private static final String PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmt5IvJZoMUpSMLw6YCPACr+qpfyjwHy6t4MUxFsya00wEOTyisMvAclu56u7PPnCYUaLOXfrnMQe2L+J0aIxRL/KFfGJ0Z3+W4AqPetPgq/ebFABcln5uXI7IR6QCBgvl2d7NVrJqUm5ahjb3DHhV0rjmEWIEAhdsHur4kR6fTdikOcsUtC4h38KmivfLIlfNbG8YbwOmgGUqDjFf7E3szIzFEaRs2OhcrWxYeIKlUALVR5pkdnGJ8BXRxT4AUPRQvF3gh9o/jnbdJEIlr840bfJ11ZEEszXhxOCSE00aeM2bIOYjuObvNm2urLUCd84074L6jfwIzujwZ9gjcJANwIDAQAB-----END PUBLIC KEY-----"; /** * 创建 JWT 令牌 */ @Test public void testCreateJWT() { // 密钥库文件: String keystore = "app.keystore"; // 密钥库密码:app123 String keystore_passowrd = "app123"; // 密钥别名:edukey String alias = "edukey"; // 密钥的访问密码 String key_password = "edu123"; // 密钥库文件路径 ClassPathResource classPathResource = new ClassPathResource(keystore); // 密钥工厂 KeyStoreKeyFactory keyStoreFactory = new KeyStoreKeyFactory(classPathResource, keystore_passowrd.toCharArray()); // 获取密钥对(公钥+私钥) KeyPair keyPair = keyStoreFactory.getKeyPair(alias,key_password.toCharArray()); // 获取私钥 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // JWT 令牌内容 Map<String,String> body = new HashMap<String,String>(); body.put("name","jwt123abc"); String bodyString = JSON.toJSONString(body); // 生成jwt令牌 Jwt jwt = JwtHelper.encode(bodyString,new RsaSigner(privateKey)); // 生成JWT令牌编码 String encoded = jwt.getEncoded(); System.out.println("jwt令牌:" + encoded); // jwt令牌:eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiand0MTIzYWJjIn0.TSO2pIkmCI42cW3jC3gnj82p4P7EC1g88asY4A7ldUAH9gkIOq9u0c3D1gx4QQgPBSKUMxmhOdIiYOThng648svVWLxXttTdonnh0R0BdHVJYQrTfXiDvFi89bMfVRa7XJtrZwCUPxFrkJJMliEhNfhh8wyg_mqbtNK8rHB1tMTb9LM6iyd50fQ8Rn_yq_W3y-CggerrrzceM58OD9QpmTZkeuong007wMqCm_NwZ-5aYUv4-q4h8C1UkE-2CGeDEwiPDifge7k1IAPIoXHcElsZk-aKO7tTmOb_s-yV2jQeEMNjMDI-UXPwqCKACSCxhPMD6L0CTk18sBjVqjS-GQ } // 校验JWT令牌 @Test public void testVerifyJWT() { // 公钥: String publicKey = PUBLIC_KEY; // 令牌 String jwtToken = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiand0MTIzYWJjIn0.TSO2pIkmCI42cW3jC3gnj82p4P7EC1g88asY4A7ldUAH9gkIOq9u0c3D1gx4QQgPBSKUMxmhOdIiYOThng648svVWLxXttTdonnh0R0BdHVJYQrTfXiDvFi89bMfVRa7XJtrZwCUPxFrkJJMliEhNfhh8wyg_mqbtNK8rHB1tMTb9LM6iyd50fQ8Rn_yq_W3y-CggerrrzceM58OD9QpmTZkeuong007wMqCm_NwZ-5aYUv4-q4h8C1UkE-2CGeDEwiPDifge7k1IAPIoXHcElsZk-aKO7tTmOb_s-yV2jQeEMNjMDI-UXPwqCKACSCxhPMD6L0CTk18sBjVqjS-GQ"; // 校验 JWT 令牌 Jwt jwt = JwtHelper.decodeAndVerify(jwtToken, new RsaVerifier(publicKey)); // 获取 JWT 令牌中封装的自定义内容 String claims = jwt.getClaims(); System.out.println("jwt自定义内容:" + claims); } }