|
@@ -0,0 +1,155 @@
|
|
|
|
+package com.dragonsoft.dcuc.approve.utils;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
+import com.dragoninfo.dcuc.common.Constants;
|
|
|
|
+import com.dragoninfo.dcuc.common.entity.Proofs;
|
|
|
|
+import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
|
|
|
|
+import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
|
|
|
|
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
|
|
|
|
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
|
|
|
|
+import org.springframework.util.Base64Utils;
|
|
|
|
+
|
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
|
+import java.util.Optional;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * <p>
|
|
|
|
+ *
|
|
|
|
+ * </p>
|
|
|
|
+ *
|
|
|
|
+ * @author huangzqa
|
|
|
|
+ * @date 2021/8/25
|
|
|
|
+ */
|
|
|
|
+public class ProofsUtil {
|
|
|
|
+ private ProofsUtil() {
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String getIdcard() {
|
|
|
|
+ BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
|
|
|
|
+ if (currentUser != null) {
|
|
|
|
+ return currentUser.getIdcard();
|
|
|
|
+ }
|
|
|
|
+ Proofs proofs = ThreadLocalProofsHolder.getProofs();
|
|
|
|
+ if (proofs != null) {
|
|
|
|
+ return proofs.getIdcard();
|
|
|
|
+ }
|
|
|
|
+ return "";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public static Proofs generalProofs(HttpServletRequest request, String defaultAppCode) {
|
|
|
|
+ BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
|
|
|
|
+ String idcard;
|
|
|
|
+ String appCode;
|
|
|
|
+ if (currentUser != null) {
|
|
|
|
+ idcard = currentUser.getIdcard();
|
|
|
|
+ appCode = defaultAppCode;
|
|
|
|
+ } else {
|
|
|
|
+ idcard = getIdcard(request);
|
|
|
|
+ appCode = getAppCode(request);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return Proofs.builder()
|
|
|
|
+ .appCode(appCode)
|
|
|
|
+ .idcard(idcard)
|
|
|
|
+ .userToken(getUserToken(request))
|
|
|
|
+ .appToken(getAppToken(request))
|
|
|
|
+ .build();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String getUserToken(HttpServletRequest request) {
|
|
|
|
+ // 使用Header获取的key会全部转换为小写字母
|
|
|
|
+ String userToken = request.getHeader(Constants.USER_TOKEN);
|
|
|
|
+
|
|
|
|
+ if (StrUtil.isBlank(userToken)) {
|
|
|
|
+ userToken = request.getHeader(Constants.BUS_SRE_TOKEN);
|
|
|
|
+ }
|
|
|
|
+ return userToken;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String getAppToken(HttpServletRequest request) {
|
|
|
|
+ String appToken = request.getHeader(Constants.APP_TOKEN);
|
|
|
|
+ if (StrUtil.isBlank(appToken)) {
|
|
|
|
+ appToken = request.getHeader(Constants.BUS_SRA_TOKEN);
|
|
|
|
+ }
|
|
|
|
+ return appToken;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取身份证号
|
|
|
|
+ *
|
|
|
|
+ * @param request 请求头
|
|
|
|
+ * @return 身份证号
|
|
|
|
+ */
|
|
|
|
+ public static String getIdcard(HttpServletRequest request) {
|
|
|
|
+ // 使用Header获取的key会全部转换为小写字母
|
|
|
|
+ String userToken = getUserToken(request);
|
|
|
|
+ String idcard = "";
|
|
|
|
+ if (StrUtil.isNotBlank(userToken)) {
|
|
|
|
+ Optional<JSONObject> jsonObject = parseJwt(userToken);
|
|
|
|
+ if (jsonObject.isPresent()) {
|
|
|
|
+ idcard = jsonObject.get().getString("idCard");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (StrUtil.isBlank(idcard)) {
|
|
|
|
+ idcard = request.getHeader(Constants.IDCARD);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (StrUtil.isBlank(idcard)) {
|
|
|
|
+ idcard = request.getHeader(Constants.BUS_SRE_IDCARD);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return idcard;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取应用代码
|
|
|
|
+ *
|
|
|
|
+ * @param request 请求头
|
|
|
|
+ * @return 应用代码
|
|
|
|
+ */
|
|
|
|
+ public static String getAppCode(HttpServletRequest request) {
|
|
|
|
+ String appToken = getAppToken(request);
|
|
|
|
+
|
|
|
|
+ String appCode = "";
|
|
|
|
+ if (StrUtil.isNotBlank(appToken)) {
|
|
|
|
+ Optional<JSONObject> jsonObject = parseJwt(appToken);
|
|
|
|
+ if (jsonObject.isPresent()) {
|
|
|
|
+ appCode = jsonObject.get().getString("appCode");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (StrUtil.isBlank(appCode)) {
|
|
|
|
+ appCode = request.getHeader(Constants.APP_CODE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (StrUtil.isBlank(appCode)) {
|
|
|
|
+ appCode = request.getHeader(Constants.BUS_SRA_ID);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return appCode;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 解析JWT内容
|
|
|
|
+ *
|
|
|
|
+ * @param token jwtToken
|
|
|
|
+ * @return 负载内容
|
|
|
|
+ */
|
|
|
|
+ private static Optional<JSONObject> parseJwt(String token) {
|
|
|
|
+ if (StrUtil.isBlank(token)) {
|
|
|
|
+ return Optional.empty();
|
|
|
|
+ }
|
|
|
|
+ int jwtLength = 3;
|
|
|
|
+ String[] split = token.split("\\.");
|
|
|
|
+ if (split.length == jwtLength) {
|
|
|
|
+ String playLoad = split[1];
|
|
|
|
+ byte[] bytes = Base64Utils.decodeFromUrlSafeString(playLoad);
|
|
|
|
+ JSONObject jsonObject = JsonUtils.parseObject(new String(bytes));
|
|
|
|
+ return Optional.of(jsonObject);
|
|
|
|
+ }
|
|
|
|
+ return Optional.empty();
|
|
|
|
+ }
|
|
|
|
+}
|