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