From c2fccb01b972176dc3da5a497b5e904025e9e98d Mon Sep 17 00:00:00 2001
From: bsw215583320 <baoshiwei121@163.com>
Date: 星期二, 16 四月 2024 15:06:51 +0800
Subject: [PATCH] Merge branch 'master' of http://210.22.126.130:1111/r/dry/herb

---
 jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java |  250 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 250 insertions(+), 0 deletions(-)

diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java
new file mode 100644
index 0000000..000c80d
--- /dev/null
+++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/JwtUtil.java
@@ -0,0 +1,250 @@
+package org.jeecg.common.system.util;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Joiner;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Date;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.constant.DataBaseConstant;
+import org.jeecg.common.constant.SymbolConstant;
+import org.jeecg.common.constant.TenantConstant;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.system.vo.SysUserCacheInfo;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.common.util.oConvertUtils;
+
+/**
+ * @Author Scott
+ * @Date 2018-07-12 14:23
+ * @Desc JWT宸ュ叿绫�
+ **/
+public class JwtUtil {
+
+	/**Token鏈夋晥鏈熶负1灏忔椂锛圱oken鍦╮eids涓紦瀛樻椂闂翠负涓ゅ�嶏級*/
+	public static final long EXPIRE_TIME = 1000 * 24 * 60 * 60 * 1000;
+	static final String WELL_NUMBER = SymbolConstant.WELL_NUMBER + SymbolConstant.LEFT_CURLY_BRACKET;
+
+    /**
+     *
+     * @param response
+     * @param code
+     * @param errorMsg
+     */
+    public static void responseError(ServletResponse response, Integer code, String errorMsg) {
+		HttpServletResponse httpServletResponse = (HttpServletResponse) response;
+		// issues/I4YH95娴忚鍣ㄦ樉绀轰贡鐮侀棶棰�
+		httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8");
+        Result jsonResult = new Result(code, errorMsg);
+		jsonResult.setSuccess(false);
+        OutputStream os = null;
+        try {
+            os = httpServletResponse.getOutputStream();
+			httpServletResponse.setCharacterEncoding("UTF-8");
+			httpServletResponse.setStatus(code);
+            os.write(new ObjectMapper().writeValueAsString(jsonResult).getBytes("UTF-8"));
+            os.flush();
+            os.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+	/**
+	 * 鏍¢獙token鏄惁姝g‘
+	 *
+	 * @param token  瀵嗛挜
+	 * @param secret 鐢ㄦ埛鐨勫瘑鐮�
+	 * @return 鏄惁姝g‘
+	 */
+	public static boolean verify(String token, String username, String secret) {
+		try {
+			// 鏍规嵁瀵嗙爜鐢熸垚JWT鏁堥獙鍣�
+			Algorithm algorithm = Algorithm.HMAC256(secret);
+			JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build();
+			// 鏁堥獙TOKEN
+			DecodedJWT jwt = verifier.verify(token);
+			return true;
+		} catch (Exception exception) {
+			return false;
+		}
+	}
+
+	/**
+	 * 鑾峰緱token涓殑淇℃伅鏃犻渶secret瑙e瘑涔熻兘鑾峰緱
+	 *
+	 * @return token涓寘鍚殑鐢ㄦ埛鍚�
+	 */
+	public static String getUsername(String token) {
+		try {
+			DecodedJWT jwt = JWT.decode(token);
+			return jwt.getClaim("username").asString();
+		} catch (JWTDecodeException e) {
+			return null;
+		}
+	}
+
+	/**
+	 * 鐢熸垚绛惧悕,5min鍚庤繃鏈�
+	 *
+	 * @param username 鐢ㄦ埛鍚�
+	 * @param secret   鐢ㄦ埛鐨勫瘑鐮�
+	 * @return 鍔犲瘑鐨則oken
+	 */
+	public static String sign(String username, String secret) {
+		Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
+		Algorithm algorithm = Algorithm.HMAC256(secret);
+		// 闄勫甫username淇℃伅
+		return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm);
+
+	}
+
+	/**
+	 * 鏍规嵁request涓殑token鑾峰彇鐢ㄦ埛璐﹀彿
+	 * 
+	 * @param request
+	 * @return
+	 * @throws JeecgBootException
+	 */
+	public static String getUserNameByToken(HttpServletRequest request) throws JeecgBootException {
+		String accessToken = request.getHeader("X-Access-Token");
+		String username = getUsername(accessToken);
+		if (oConvertUtils.isEmpty(username)) {
+			throw new JeecgBootException("鏈幏鍙栧埌鐢ㄦ埛");
+		}
+		return username;
+	}
+	
+	/**
+	  *  浠巗ession涓幏鍙栧彉閲�
+	 * @param key
+	 * @return
+	 */
+	public static String getSessionData(String key) {
+		//${myVar}%
+		//寰楀埌${} 鍚庨潰鐨勫��
+		String moshi = "";
+		String wellNumber = WELL_NUMBER;
+
+		if(key.indexOf(SymbolConstant.RIGHT_CURLY_BRACKET)!=-1){
+			 moshi = key.substring(key.indexOf("}")+1);
+		}
+		String returnValue = null;
+		if (key.contains(wellNumber)) {
+			key = key.substring(2,key.indexOf("}"));
+		}
+		if (oConvertUtils.isNotEmpty(key)) {
+			HttpSession session = SpringContextUtils.getHttpServletRequest().getSession();
+			returnValue = (String) session.getAttribute(key);
+		}
+		//缁撴灉鍔犱笂${} 鍚庨潰鐨勫��
+		if(returnValue!=null){returnValue = returnValue + moshi;}
+		return returnValue;
+	}
+	
+	/**
+	  * 浠庡綋鍓嶇敤鎴蜂腑鑾峰彇鍙橀噺
+	 * @param key
+	 * @param user
+	 * @return
+	 */
+	public static String getUserSystemData(String key,SysUserCacheInfo user) {
+		if(user==null) {
+			user = JeecgDataAutorUtils.loadUserInfo();
+		}
+		//#{sys_user_code}%
+		
+		// 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
+		LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+		
+		String moshi = "";
+        String wellNumber = WELL_NUMBER;
+		if(key.indexOf(SymbolConstant.RIGHT_CURLY_BRACKET)!=-1){
+			 moshi = key.substring(key.indexOf("}")+1);
+		}
+		String returnValue = null;
+		//閽堝鐗规畩鏍囩ず澶勭悊#{sysOrgCode}锛屽垽鏂浛鎹�
+		if (key.contains(wellNumber)) {
+			key = key.substring(2,key.indexOf("}"));
+		} else {
+			key = key;
+		}
+		//鏇挎崲涓虹郴缁熺櫥褰曠敤鎴峰笎鍙�
+		if (key.equals(DataBaseConstant.SYS_USER_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_CODE_TABLE)) {
+			if(user==null) {
+				returnValue = sysUser.getUsername();
+			}else {
+				returnValue = user.getSysUserCode();
+			}
+		}
+		//鏇挎崲涓虹郴缁熺櫥褰曠敤鎴风湡瀹炲悕瀛�
+		else if (key.equals(DataBaseConstant.SYS_USER_NAME)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_NAME_TABLE)) {
+			if(user==null) {
+				returnValue = sysUser.getRealname();
+			}else {
+				returnValue = user.getSysUserName();
+			}
+		}
+		
+		//鏇挎崲涓虹郴缁熺敤鎴风櫥褰曟墍浣跨敤鐨勬満鏋勭紪鐮�
+		else if (key.equals(DataBaseConstant.SYS_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_ORG_CODE_TABLE)) {
+			if(user==null) {
+				returnValue = sysUser.getOrgCode();
+			}else {
+				returnValue = user.getSysOrgCode();
+			}
+		}
+		//鏇挎崲涓虹郴缁熺敤鎴锋墍鎷ユ湁鐨勬墍鏈夋満鏋勭紪鐮�
+		else if (key.equals(DataBaseConstant.SYS_MULTI_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_MULTI_ORG_CODE_TABLE)) {
+			if(user==null){
+				//TODO 鏆傛椂浣跨敤鐢ㄦ埛鐧诲綍閮ㄩ棬锛屽瓨鍦ㄩ�昏緫缂洪櫡锛屼笉鏄敤鎴锋墍鎷ユ湁鐨勯儴闂�
+				returnValue = sysUser.getOrgCode();
+			}else{
+				if(user.isOneDepart()) {
+					returnValue = user.getSysMultiOrgCode().get(0);
+				}else {
+					returnValue = Joiner.on(",").join(user.getSysMultiOrgCode());
+				}
+			}
+		}
+		//鏇挎崲涓哄綋鍓嶇郴缁熸椂闂�(骞存湀鏃�)
+		else if (key.equals(DataBaseConstant.SYS_DATE)|| key.toLowerCase().equals(DataBaseConstant.SYS_DATE_TABLE)) {
+			returnValue = DateUtils.formatDate();
+		}
+		//鏇挎崲涓哄綋鍓嶇郴缁熸椂闂达紙骞存湀鏃ユ椂鍒嗙锛�
+		else if (key.equals(DataBaseConstant.SYS_TIME)|| key.toLowerCase().equals(DataBaseConstant.SYS_TIME_TABLE)) {
+			returnValue = DateUtils.now();
+		}
+		//娴佺▼鐘舵�侀粯璁ゅ�硷紙榛樿鏈彂璧凤級
+		else if (key.equals(DataBaseConstant.BPM_STATUS)|| key.toLowerCase().equals(DataBaseConstant.BPM_STATUS_TABLE)) {
+			returnValue = "1";
+		}
+		//update-begin-author:taoyan date:20210330 for:澶氱鎴稩D浣滀负绯荤粺鍙橀噺
+		else if (key.equals(TenantConstant.TENANT_ID) || key.toLowerCase().equals(TenantConstant.TENANT_ID_TABLE)){
+			returnValue = SpringContextUtils.getHttpServletRequest().getHeader(CommonConstant.TENANT_ID);
+		}
+		//update-end-author:taoyan date:20210330 for:澶氱鎴稩D浣滀负绯荤粺鍙橀噺
+		if(returnValue!=null){returnValue = returnValue + moshi;}
+		return returnValue;
+	}
+	
+//	public static void main(String[] args) {
+//		 String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjUzMzY1MTMsInVzZXJuYW1lIjoiYWRtaW4ifQ.xjhud_tWCNYBOg_aRlMgOdlZoWFFKB_givNElHNw3X0";
+//		 System.out.println(JwtUtil.getUsername(token));
+//	}
+}

--
Gitblit v1.9.3