分布式微服务 jwt实现单点登录
Step 1 -> 添加依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
Step 2 -> 添加工具类
package com.guanqi.util;
import com.guanqi.entity.User;
import io.jsonwebtoken.*;
import java.util.Date;
public class JwtUtil {
private static final String SECURITY_KEY = "asfasdfasdcl-oisdfzx=zxc";
private static final Long TTL = 7 * 24 * 60 *6*1000L;
public static String createJwtToken(User user){
JwtBuilder jwtBuilder = Jwts.builder()
.setId(user.getId() + "")
.setSubject(user.getUsername())
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + TTL))
.claim("id", user.getId())
.claim("username", user.getUsername())
.claim("nickname", user.getNickname())
.signWith(SignatureAlgorithm.HS256,SECURITY_KEY);
return jwtBuilder.compact();
}
public static User parseJwtToken(String token){
User user = null;
try {
Claims body = (Claims) Jwts.parser().setSigningKey(SECURITY_KEY).parse(token).getBody();
Integer id = (Integer) body.get("id");
String username = (String) body.get("username");
String nickname = (String) body.get("nickname");
user = new User().setId(id).setUsername(username).setNickname(nickname);
} catch (ExpiredJwtException e) {
e.printStackTrace();
} catch (MalformedJwtException e) {
e.printStackTrace();
} catch (SignatureException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
return user;
}
}
Step 3 -> main 测试
public static void main(String[] args) {
User user = new User().setId(1).setUsername("testadmin").setNickname("这是个昵称");
String jwtToken = createJwtToken(user);
System.out.println(jwtToken);
User user1 = parseJwtToken(jwtToken);
System.out.println(user1);
}
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxIiwic3ViIjoidGVzdGFkbWluIiwiaWF0IjoxNTkwODk1MDk1LCJleHAiOjE1OTA5NTU1NzUsImlkIjoxLCJ1c2VybmFtZSI6InRlc3RhZG1pbiIsIm5pY2tuYW1lIjoi6L-Z5piv5Liq5pi156ewIn0.ZX5UM7Ti4uH6RNcO2FGXkzBTsLxj2bQ1zNPo7rklLsc
User(id=1, username=testadmin, password=null, nickname=这是个昵称, email=null, createTime=Sun May 31 11:18:16 CST 2020, status=0)