You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.9 KiB

10 months ago
package com.dsideal.gw.Util;
import com.dsideal.gw.GwApplication;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
3 months ago
import io.jsonwebtoken.security.Keys;
import com.jfinal.plugin.activerecord.Record;
10 months ago
3 months ago
import javax.crypto.SecretKey;
import javax.servlet.http.HttpServletRequest;
10 months ago
import java.nio.charset.StandardCharsets;
3 months ago
import java.util.Date;
10 months ago
import java.util.HashMap;
import java.util.Map;
public class JwtUtil {
public static final String AUTHORIZATION_STARTER = "Bearer ";
3 months ago
public static final String SECRET = GwApplication.PropKit.get("jwt.SECRET");
// 生成安全的密钥
private static final SecretKey key = Keys.hmacShaKeyFor(SECRET.getBytes(StandardCharsets.UTF_8));
10 months ago
/**
3 months ago
* JWT
10 months ago
*
* @param identity_id ID
* @param person_id ID
10 months ago
* @param bureau_id ID
10 months ago
* @return JWT
*/
10 months ago
public static String generateToken(int identity_id, String person_id, String bureau_id) {
10 months ago
// 获取当前日期和时间
Date now = new Date();
// 格式化日期
Map<String, Object> claims = new HashMap<>();
claims.put("create_time", now.toString());
claims.put("identity_id", identity_id);
claims.put("person_id", person_id);
10 months ago
claims.put("bureau_id", bureau_id);
3 months ago
return AUTHORIZATION_STARTER + Jwts.builder()
.setClaims(claims)
.signWith(key, SignatureAlgorithm.HS256)
.compact();
10 months ago
}
public static Claims getClaims(String token) {
if (token.contains(AUTHORIZATION_STARTER)) {
token = token.replace(AUTHORIZATION_STARTER, "");
}
Claims claims;
try {
3 months ago
claims = Jwts.parserBuilder()
.setSigningKey(key)
.build()
10 months ago
.parseClaimsJws(token)
.getBody();
} catch (Exception e) {
3 months ago
System.out.println(e.toString());
3 months ago
claims = null;
10 months ago
}
return claims;
}
3 months ago
/**
*
*
* @param req
* @return
*/
public static Record getPersonInfo(HttpServletRequest req) {
String jwtToken = req.getHeader("Authorization");
if (jwtToken == null) {
//尝试从Cookie中获取jwt-token
jwtToken = CookieUtil.getValue(req, "jwt-token");
}
Record record = new Record();
Claims claims = getClaims(jwtToken);
if (claims != null) {
record.set("identity_id", claims.get("identity_id"));
record.set("person_id", claims.get("person_id"));
record.set("bureau_id", claims.get("bureau_id"));
record.set("create_time", claims.get("create_time"));
}
return record;
10 months ago
}
3 months ago
}