package com.lxzn.auth;
|
|
import com.alibaba.fastjson.JSON;
|
import com.lxzn.framework.utils.ValidateUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.core.io.Resource;
|
import org.springframework.security.jwt.Jwt;
|
import org.springframework.security.jwt.JwtHelper;
|
import org.springframework.security.jwt.crypto.sign.RsaVerifier;
|
import org.springframework.web.context.request.RequestAttributes;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.BufferedReader;
|
import java.io.IOException;
|
import java.io.InputStreamReader;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
@Slf4j
|
public class JwtUtil {
|
|
//公钥
|
private static final String PUBLIC_KEY = "publickey.txt";
|
|
/**
|
* 获取非对称加密公钥 Key
|
* @return 公钥 Key
|
*/
|
public static String getPubKey() {
|
Resource resource = new ClassPathResource(PUBLIC_KEY);
|
BufferedReader br = null;
|
try {
|
InputStreamReader inputStreamReader = new InputStreamReader(resource.getInputStream());
|
br = new BufferedReader(inputStreamReader);
|
return br.lines().collect(Collectors.joining("\n"));
|
} catch (IOException ioe) {
|
log.error(ioe.getMessage(), ioe.getStackTrace());
|
return null;
|
}finally {
|
if(br != null) {
|
try {
|
br.close();
|
} catch (IOException e) {
|
log.error(e.getMessage(), e.getStackTrace());
|
return null;
|
}
|
}
|
}
|
}
|
|
public static Map<String, String> parseJwtToken(String jwtToken) {
|
String pubKey = getPubKey();
|
Jwt jwt = JwtHelper.decodeAndVerify(jwtToken, new RsaVerifier(pubKey));
|
if(jwt == null)
|
return null;
|
String claims = jwt.getClaims();
|
if(!ValidateUtil.validateString(claims))
|
return null;
|
Map<String, String> map = JSON.parseObject(claims, Map.class);
|
return map;
|
}
|
|
public static String getUserId() {
|
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
|
if(requestAttributes == null)
|
return null;
|
HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
|
if(request == null)
|
return null;
|
String header = request.getHeader("Authorization");
|
if(ValidateUtil.validateString(header) && header.toLowerCase().startsWith("bearer ")) {
|
String token = header.substring("bearer ".length());
|
Map<String, String> map = parseJwtToken(token);
|
if(map != null && map.containsKey("userId")){
|
return map.get("userId");
|
}
|
}
|
return null;
|
}
|
}
|