- jwtUtil
public class JwtUtil {
public static final Long JWT_TTL = 3600000L;
public static final String JWT_KEY = "xk";
public static String createJWT(String id, String subject, Long ttlMillis) {
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
if(ttlMillis==null){
ttlMillis=JwtUtil.JWT_TTL;
}
long expMillis = nowMillis + ttlMillis;
Date expDate = new Date(expMillis);
SecretKey secretKey = generalKey();
JwtBuilder builder = Jwts.builder()
.setId(id)
.setSubject(subject)
.setIssuer("admin")
.setIssuedAt(now)
.signWith(signatureAlgorithm, secretKey)
.setExpiration(expDate);
return builder.compact();
}
public static Claims parseJWT(String jwt) throws Exception {
SecretKey secretKey = generalKey();
return Jwts.parser()
.setSigningKey(secretKey)
.parseClaimsJws(jwt)
.getBody();
}
}
- 系统服务登录代码
public Result login(@RequestBody Admin admin) {
boolean flag = adminService.login(admin);
if(flag){
Map<String, String> info = new HashMap<>();
info.put("username", admin.getLoginName());
String jwt = JwtUtil.createJWT(UUID.randomUUID().toString(), admin.getLoginName(), null);
info.put("token", jwt);
return new Result(true, StatusCode.OK, "登录成功", info);
}
return new Result(false, StatusCode.ERROR, "登录失败");
}
- 网关服务解析jwt
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
if (request.getURI().getPath().contains("/admin/login")) {
return chain.filter(exchange);
}
HttpHeaders headers = request.getHeaders();
String jwtToken = headers.getFirst("token");
if (StringUtils.isEmpty(jwtToken)) {
response.setStatusCode(HttpStatus.UNAUTHORIZED);
return response.setComplete();
}
try {
JwtUtil.parseJWT(jwtToken);
} catch (Exception e) {
e.printStackTrace();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
return response.setComplete();
}
return chain.filter(exchange);
}