From b6dee87c91bfdcb68fcc456c9a2ec46b2ed7cbe3 Mon Sep 17 00:00:00 2001 From: dangsn <dangsn@chicecm.com> Date: 星期二, 11 六月 2024 12:33:35 +0800 Subject: [PATCH] 登录和权限校验功能 --- Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java | 6 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheNameConstant.java | 5 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java | 139 ++++++++++- Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/SessionInfo.java | 19 + Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/bo/LoginResultBO.java | 29 +- Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java | 59 +++- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java | 4 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java | 101 +------- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LoginServiceI.java | 28 -- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/WebUtil.java | 4 Source/plt-web/plt-web-parent/plt-web-base/pom.xml | 5 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebContextInfoFetcher.java | 4 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java | 6 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java | 99 ++++++++ Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciDateUtil.java | 9 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ControllerUtil.java | 36 ++ /dev/null | 40 --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBtmIOServiceImpl.java | 8 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLogServiceImpl.java | 4 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/TokenKeyConstant.java | 6 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java | 29 ++ Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java | 14 - Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml | 7 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsStatusServiceImpl.java | 2 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/WebThreadLocalUtil.java | 33 + 25 files changed, 434 insertions(+), 262 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web-base/pom.xml b/Source/plt-web/plt-web-parent/plt-web-base/pom.xml index 3b0dbc6..c39c2fe 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/pom.xml +++ b/Source/plt-web/plt-web-parent/plt-web-base/pom.xml @@ -51,6 +51,11 @@ <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>transmittable-thread-local</artifactId> + <version>2.12.6</version> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/TokenKeyConstant.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/TokenKeyConstant.java index e3baafd..033cab1 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/TokenKeyConstant.java +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/TokenKeyConstant.java @@ -45,7 +45,7 @@ /** * 浠ょ墝绉橀挜 */ - public static final String SECRET = "thisissecretforjwt"; + public static final String SECRET = "THISISAJWTTOKENKEYBELONGINGTOHONGBO"; /** * JWT涓殑鐢ㄦ埛涓婚敭鐨凨ey @@ -55,7 +55,7 @@ /** * JWT涓璽oken鐨刱ey */ - public static final String JWT_TOKEN_KEY = "token_key"; + public static final String JWT_TOKEN_KEY = "jwt_token_key"; /** * JWT涓敤鎴疯处鍙风殑key @@ -71,4 +71,6 @@ * 缂撳瓨鏈夋晥鏈燂紝榛樿30锛堝垎閽燂級 */ public static final long EXPIRATION = 30; + + } diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java new file mode 100644 index 0000000..e9c2ddd --- /dev/null +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/constant/VConstant.java @@ -0,0 +1,99 @@ +package com.vci.starter.web.constant; + +/** + * @Description 甯哥敤鐨勫父閲� + * @Author dangsn + * @Date 2024/6/11 10:44 + */ +public class VConstant { + /** + * UTF-8 瀛楃闆� + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 瀛楃闆� + */ + public static final String GBK = "GBK"; + + /** + * 鏂滄潬 + */ + public static final String PATH_SEP = "/"; + + /** + * LDAP 杩滅▼鏂规硶璋冪敤 + */ + public static final String LOOKUP_LDAP = "ldap:"; + + /** + * LDAPS 杩滅▼鏂规硶璋冪敤 + */ + public static final String LOOKUP_LDAPS = "ldaps:"; + + /** + * http璇锋眰 + */ + public static final String HTTP = "http://"; + + /** + * https璇锋眰 + */ + public static final String HTTPS = "https://"; + + /** + * 鎴愬姛鏍囪 + */ + public static final Integer SUCCESS = 200; + + /** + * 澶辫触鏍囪 + */ + public static final Integer FAIL = 500; + + /** + * 鐧诲綍鎴愬姛 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 娉ㄩ攢 + */ + public static final String LOGOUT = "Logout"; + + /** + * 娉ㄥ唽 + */ + public static final String REGISTER = "Register"; + + /** + * 鐧诲綍澶辫触 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 鍙傛暟绠$悊 cache key + */ + public static final String SYS_CONFIG_KEY = "sys_config:"; + + /** + * 鏋氫妇绠$悊 cache key + */ + public static final String SYS_ENUM_KEY = "sys_enum:"; + + /** + * 璧勬簮鏄犲皠璺緞 鍓嶇紑 + */ + public static final String RESOURCE_PREFIX = "/profile"; + + /** + * 瀹氭椂浠诲姟鐧藉悕鍗曢厤缃紙浠呭厑璁歌闂殑鍖呭悕锛屽鍏朵粬闇�瑕佸彲浠ヨ嚜琛屾坊鍔狅級 + */ + public static final String[] JOB_WHITELIST_STR = { "com.vci" }; + + /** + * 瀹氭椂浠诲姟杩濊鐨勫瓧绗� + */ + public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", + "org.springframework", "org.apache" }; +} diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java index 5be623c..932537b 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSecurityInterceptor.java @@ -72,36 +72,32 @@ if(!(handler instanceof HandlerMethod)){ return true; } - List<String> unCheckUrls = new ArrayList<>(); - if(springMVCConfig !=null && springMVCConfig.getUnCheckUrls() !=null){ - unCheckUrls = springMVCConfig.getUnCheckUrls(); - } - SessionInfo sessionInfo = null; - if(StringUtils.isNotBlank(userToken)){ - try{ - sessionInfo = sessionForLoginI.getSessionInfoByToken(userToken); - }catch (Throwable e){ - logger.error("鑾峰彇token鍑洪敊",e); - //sendErrorMsg(response,"鑾峰彇token鐨勪俊鎭嚭閿欙紝" + userToken + "," + LangBaseUtil.getErrorMsg(e),1); - //return false; - } - if(sessionInfo!=null){ - WebThreadLocalUtil.getCurrentUserSessionInfoInThread().set(sessionInfo); - } - } + + boolean unCheckLogin = false; if(handler instanceof HandlerMethod) { HandlerMethod hm = (HandlerMethod)handler; Method method = hm.getMethod(); //璁剧疆浜嗕笉鏍¢獙鐨勪細鐩存帴杩斿洖true if (method.isAnnotationPresent(VciUnCheckRight.class)) { - return true; + unCheckLogin = true; } if (method.getDeclaringClass().isAnnotationPresent(VciUnCheckRight.class)) { - return true; + unCheckLogin = true; } } if(url.endsWith(".md")){ + unCheckLogin = true; + } + if(unCheckLogin){ + //铏界劧涓嶆牎楠屾潈闄愶紝浣嗘槸濡傛灉token涓嶄负绌猴紝闇�瑕佹洿鏂板綋鍓嶇敤鎴� + SessionInfo sessionInfo = getSessionInfo(userToken); + return true; + } + //鑾峰彇閰嶇疆鏂囦欢涓紝涓嶆牎楠屾潈闄愮殑璺緞 + List<String> unCheckUrls = new ArrayList<>(); + if(springMVCConfig !=null && springMVCConfig.getUnCheckUrls() !=null){ + unCheckUrls = springMVCConfig.getUnCheckUrls(); } if(StringUtils.isBlank(userToken) && !unCheckUrls.contains(url)){ //璇存槑鏄病鏈夌敤鎴蜂俊鎭殑锛岃�屼笖涔熷繀椤昏鏍¢獙鏄惁鐧诲綍鐨勬儏鍐� @@ -111,14 +107,15 @@ } sendErrorMsg(response,"娌℃湁鐧诲綍绯荤粺锛岃鍏堢櫥褰�",1); return false; - //琚玊涓嬬嚎鐢眞ebsocket鐩存帴鎻愰啋 + //琚涪涓嬬嚎鐢眞ebsocket鐩存帴鎻愰啋 }else{ + SessionInfo sessionInfo = getSessionInfo(userToken); if(sessionInfo == null){ - //涔熸槸璇存槑涓嶅瓨鍦紝琚玊涓嬬嚎鏃朵篃鑾峰彇涓嶅埌session鐨勪俊鎭簡 + //涔熸槸璇存槑涓嶅瓨鍦紝琚涪涓嬬嚎鏃朵篃鑾峰彇涓嶅埌session鐨勪俊鎭簡 if(logger.isErrorEnabled()) { - logger.error("token鍊奸潪娉曪紝鎴栬�呯敤鎴峰凡缁忚韪笅绾�," + userToken); + logger.error("token鍊奸潪娉曪紝鎴栬繃鏈燂紝鎴栬�呯敤鎴峰凡缁忚韪笅绾�," + userToken); } - sendErrorMsg(response,"token鍊奸潪娉曪紝鎴栬�呯敤鎴峰凡缁忚韪笅绾�," + userToken,1); + sendErrorMsg(response,"token鍊奸潪娉曪紝鎴栬繃鏈燂紝鎴栬�呯敤鎴峰凡缁忚韪笅绾�," + userToken,1); return false; }else{ if(!unCheckUrls.contains(url)){ @@ -155,6 +152,22 @@ return true; } + private SessionInfo getSessionInfo(String userToken){ + SessionInfo sessionInfo = null; + if(StringUtils.isNotBlank(userToken)){ + try{ + sessionInfo = sessionForLoginI.getSessionInfoByToken(userToken); + }catch (Throwable e){ + logger.error("鑾峰彇token鍑洪敊",e); + } + if(sessionInfo!=null){ + WebThreadLocalUtil.setCurrentUserSessionInfoInThread(sessionInfo); + WebThreadLocalUtil.setTokenInThread(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS+sessionInfo.getToken()); + } + } + return sessionInfo; + } + /** * 杩斿洖閿欒淇℃伅 * @param response 鐩稿簲瀵硅薄 diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java index ad50dfc..96d9b5f 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/interceptor/VciSessionForLoginI.java @@ -2,6 +2,7 @@ import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.SessionInfo; +import com.vci.starter.web.pagemodel.TokenVO; import javax.servlet.http.HttpServletRequest; @@ -68,4 +69,32 @@ * @return 鐢ㄦ埛鍦ㄧ郴缁熶腑杩樺彲浠ュ瓨鍦ㄧ殑鏃堕棿(姣) */ long getCanAliveTime(String userToken); + + /** + * 鍒涘缓璁稿彲鐨勪俊鎭紝骞跺瓨鍌ㄥ埌缂撳瓨涓� + * @param sessionInfo session鐨勪俊鎭� + * @return 璁稿彲淇℃伅 + */ + TokenVO createToken(SessionInfo sessionInfo) ; + + /** + * 鍒涘缓璁稿彲鐨勪俊鎭紝骞跺瓨鍌ㄥ埌缂撳瓨涓� + * @param key token鍦╮edis涓殑key銆� + * @param sessionInfo session鐨勪俊鎭� + * @return 璁稿彲淇℃伅 + */ + TokenVO createToken(String key, SessionInfo sessionInfo) ; + + /** + * 鍒锋柊缂撳瓨涓殑token + * @param sessionInfo session鐨勪俊鎭� + */ + void refreshToken(SessionInfo sessionInfo); + + /** + * 鍒锋柊缂撳瓨涓殑token + * @param key token鍦╮edis涓殑key + * @param sessionInfo session鐨勪俊鎭� + */ + void refreshToken(String key, SessionInfo sessionInfo); } diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/SessionInfo.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/SessionInfo.java index 9147094..37c2102 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/SessionInfo.java +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/pagemodel/SessionInfo.java @@ -1,10 +1,7 @@ package com.vci.starter.web.pagemodel; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * session淇℃伅妯″瀷 @@ -236,6 +233,11 @@ * 瀵嗙爜淇℃伅 */ private String passwordInfo; + + /** + * 鏈�鍚庣櫥褰曟椂闂� + */ + private long lastLoginTime; public String getDutyOid() { return dutyOid; @@ -614,6 +616,14 @@ this.functionOperaMap = functionOperaMap; } + public long getLastLoginTime() { + return lastLoginTime; + } + + public void setLastLoginTime(long lastLoginTime) { + this.lastLoginTime = lastLoginTime; + } + @Override public String toString() { return "SessionInfo{" + @@ -664,6 +674,7 @@ ", workNo='" + workNo + '\'' + ", isMustChangePassword=" + isMustChangePassword + ", passwordInfo='" + passwordInfo + '\'' + + ", lastLoginTime=" + lastLoginTime + '}'; } } diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ControllerUtil.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ControllerUtil.java index 876a80b..7c9b4d6 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ControllerUtil.java +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/ControllerUtil.java @@ -1,19 +1,17 @@ package com.vci.starter.web.util; -import com.vci.starter.web.pagemodel.PageHelper; +import com.vci.starter.web.constant.VConstant; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.http.MediaType; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.net.URLDecoder; import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -292,7 +290,7 @@ * @param isQueryTotal 鏄惁鏌ヨ鎬绘暟 */ public static void setQueryTotal(HttpServletRequest request, boolean isQueryTotal){ - WebThreadLocalUtil.getNeedQueryTotalInThread().set(isQueryTotal?"true":"false"); + WebThreadLocalUtil.setNeedQueryTotalInThread(isQueryTotal?"true":"false"); //request.setAttribute(webProperties.getQueryTotalSessionName(), isQueryTotal); } @@ -323,4 +321,32 @@ tempFileForDownloadMap.remove(uuid); } } + + /** + * 鍐呭缂栫爜 + * + * @param str 鍐呭 + * @return 缂栫爜鍚庣殑鍐呭 + */ + public static String urlEncode(String str) { + try { + return URLEncoder.encode(str, VConstant.UTF8); + } catch (UnsupportedEncodingException e) { + return StringUtils.EMPTY; + } + } + + /** + * 鍐呭瑙g爜 + * + * @param str 鍐呭 + * @return 瑙g爜鍚庣殑鍐呭 + */ + public static String urlDecode(String str) { + try { + return URLDecoder.decode(str, VConstant.UTF8); + } catch (UnsupportedEncodingException e) { + return StringUtils.EMPTY; + } + } } diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java index 913d390..1af32e7 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java @@ -1210,7 +1210,7 @@ * @return 浼氳瘽瀵硅薄 */ public static SessionInfo getCurrentUserSessionInfoNotException() { - return WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get(); + return WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); } /** @@ -1218,7 +1218,7 @@ * @param sessionInfo 鐢ㄦ埛瀵硅薄 */ public static void setCurrentUserSessionInfo(SessionInfo sessionInfo){ - WebThreadLocalUtil.getCurrentUserSessionInfoInThread().set(sessionInfo); + WebThreadLocalUtil.setCurrentUserSessionInfoInThread(sessionInfo); } /** @@ -1226,7 +1226,7 @@ * @return true琛ㄧず鏌ヨ */ public static boolean isQueryTotal(){ - String needQueryTotal = WebThreadLocalUtil.getNeedQueryTotalInThread().get(); + String needQueryTotal = WebThreadLocalUtil.getNeedQueryTotalInThread(); if("false".equalsIgnoreCase(needQueryTotal)){ return false; }else{ diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciDateUtil.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciDateUtil.java index 14acc5d..9fc6ce2 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciDateUtil.java +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciDateUtil.java @@ -1075,6 +1075,15 @@ } /** + * 鑾峰彇褰撳墠鏃堕棿鐨則ime鍊� + * @Return java.lang.Long + */ + public static Long getNowTime() { + Date date = new Date(); + return date.getTime(); + } + + /** * 灏唗imestamp杞崲涓篋ate * @param timestamp timestamp * @Return java.util.Date diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/WebThreadLocalUtil.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/WebThreadLocalUtil.java index bf5b699..a5303dd 100644 --- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/WebThreadLocalUtil.java +++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/WebThreadLocalUtil.java @@ -1,6 +1,7 @@ package com.vci.starter.web.util; +import com.alibaba.ttl.TransmittableThreadLocal; import com.vci.starter.web.pagemodel.SessionInfo; /** @@ -12,33 +13,43 @@ /** * 绾跨▼閲岀殑褰撳墠鐢ㄦ埛session淇℃伅 */ - private static ThreadLocal<SessionInfo> currentUserSessionInfoInThread = new ThreadLocal<SessionInfo>(); + private static TransmittableThreadLocal<SessionInfo> currentUserSessionInfoInThread = new TransmittableThreadLocal<SessionInfo>(); /** * 鏌ヨ鍒楄〃鐨勬椂鍊欐槸鍚︽煡璇㈡�绘暟 */ - private static ThreadLocal<String> needQueryTotalInThread = new ThreadLocal<String>(); + private static TransmittableThreadLocal<String> needQueryTotalInThread = new TransmittableThreadLocal<String>(); + /** + * 绾跨▼閲岀殑褰撳墠token淇℃伅 + */ + private static TransmittableThreadLocal<String> tokenThread = new TransmittableThreadLocal<String>(); /** * 鑾峰彇褰撳墠鐢ㄦ埛鐨剆ession瀵硅薄 * @return session瀵硅薄 */ - public static ThreadLocal<SessionInfo> getCurrentUserSessionInfoInThread() { - return currentUserSessionInfoInThread; + public static SessionInfo getCurrentUserSessionInfoInThread() { + return currentUserSessionInfoInThread.get(); } - - public static void setCurrentUserSessionInfoInThread(ThreadLocal<SessionInfo> currentUserSessionInfoInThread) { - WebThreadLocalUtil.currentUserSessionInfoInThread = currentUserSessionInfoInThread; + public static void setCurrentUserSessionInfoInThread(SessionInfo sessionInfo) { + currentUserSessionInfoInThread.set(sessionInfo); } - public static ThreadLocal<String> getNeedQueryTotalInThread() { - return needQueryTotalInThread; + public static String getNeedQueryTotalInThread() { + return needQueryTotalInThread.get(); } - public static void setNeedQueryTotalInThread(ThreadLocal<String> needQueryTotalInThread) { - WebThreadLocalUtil.needQueryTotalInThread = needQueryTotalInThread; + public static void setNeedQueryTotalInThread(String needQueryTotal) { + needQueryTotalInThread.set(needQueryTotal); } + public static String getTokenInThread() { + return tokenThread.get(); + } + + public static void setTokenInThread(String token) { + tokenThread.set(token); + } } diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java index 20a4a98..126723c 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmSessionForLoginImpl.java @@ -3,14 +3,20 @@ import com.vci.corba.common.PLException; import com.vci.corba.omd.data.AttributeValue; import com.vci.starter.web.annotation.log.VciUnLog; +import com.vci.starter.web.constant.TokenKeyConstant; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.interceptor.VciSessionForLoginI; import com.vci.starter.web.pagemodel.SessionInfo; -import com.vci.starter.web.util.VciBaseUtil; +import com.vci.starter.web.pagemodel.TokenVO; +import com.vci.starter.web.util.*; +import com.vci.web.constant.CacheNameConstant; import com.vci.web.properties.WebProperties; +import com.vci.web.redis.RedisService; import com.vci.web.service.WebBoServiceI; import com.vci.web.util.PlatformClientUtil; import com.vci.web.util.WebUtil; +import io.jsonwebtoken.Claims; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -18,11 +24,13 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; /** * 浼氳瘽瀛樺偍鐨勬湇鍔� @@ -55,6 +63,12 @@ */ @Autowired private PlatformClientUtil platformClientUtil; + + /** + * redis鏈嶅姟 + */ + @Resource + private RedisService redisService; /** * 妫�鏌ョ敤鎴锋槸鍚︾櫥褰� @@ -137,11 +151,14 @@ @Override public void updateRequestTime(String userToken) { WebUtil.alertNotNull(userToken,"浼氳瘽璁稿彲鐮�"); - try{ - platformClientUtil.getBOFactoryService().executeUpdateSql("update VCI_SESSIONINFO set lastRequestTime = " + String.valueOf(System.currentTimeMillis()) + " where TOKEN ='" + userToken.trim() + "'"); - }catch (PLException e){ - throw WebUtil.getVciBaseException(e); + //璇存槑鏄痡wt鐨則oken + String jwtToken = getSessionTokenKeyInRedis(userToken); + if(StringUtils.isBlank(jwtToken)){ + jwtToken = userToken; } + SessionInfo sessionInfo = redisService.getCacheObject(jwtToken); + sessionInfo.setLastLoginTime(VciDateUtil.getNowTime()); + redisService.setCacheObject(jwtToken, sessionInfo, webProperties.getClientSessionAliveMax()!=0?webProperties.getClientSessionAliveMax(): TokenKeyConstant.EXPIRATION, TimeUnit.MINUTES); } /** @@ -153,16 +170,26 @@ @Override public SessionInfo getSessionInfoByToken(String userToken) { WebUtil.alertNotNull(userToken,"璁稿彲鐨勪俊鎭�"); - List<Map> dataList = boService.queryBySqlForMap("select JSONSTRING as JSONSTRING from VCI_SESSIONINFO where TOKEN ='" + userToken.trim() + "'", new HashMap<>()); -// List<Map> dataList = null; -// Map map= new HashMap<>(); -// map.put("JSONSTRING","{\"browser\":\"122.0.0.0\",\"deptName\":\"涓�杞﹂棿\",\"deptOid\":\"002151D0-13B9-DB23-7006-34DCAC76B3BE\",\"deviceInfo\":[],\"email\":\"\",\"functionOids\":[\"2339F262-1715-F5EE-7E50-4DD6A42B8668\",\"2EC65569-17C7-84C2-A7A6-737E1B021DC4\",\"32037B20-2F95-F4E8-6077-C0B5226B033D\",\"ADB513D3-397E-07DA-7456-992916FF12D9\",\"5D2FDBCA-E04D-B611-8311-8F06E031BF95\",\"56186AEE-80D7-2CDB-CB80-09E87CB9125F\",\"536FD86E-779E-397D-2945-69AAA942A578\",\"FDB26577-596F-CA6F-1A1F-7D68C0E0A3B9\",\"E612DAB4-B3EC-8D08-46CA-8905AC82EF2D\",\"893E5778-481C-A04E-2742-ADFDF0CE3A15\",\"297C9ED8-DF76-9D91-B041-45F1DE161FD8\",\"63A98B92-5DA8-3F23-390E-2A389C714BC1\",\"931C3199-3CA8-733B-1CF3-FE88F0258E16\",\"AC04E222-F14B-F4FF-11BB-DFE8917A2756\",\"64C6BFFD-95B2-995A-73FD-DEE8212DAA56\",\"CC5F364D-E299-81CF-0B20-4BF09956FDA3\",\"B5985BFB-F31D-05A1-9943-D43704F35EDB\",\"86BD9541-8F9B-395F-A73D-B856635EE91C\",\"72ACFF87-05B6-3D8F-4CC4-C559FE9AD372\",\"ECFA5263-AB30-78CB-6F5B-DF11BC054616\",\"88AC00BE-54CC-DE68-F31E-C3D9FAEDD902\",\"F2B19983-15EF-4DC8-0A26-AF322EC8B9D0\",\"D8C8AE63-AD0B-D567-BFBE-AE4BF302C241\",\"D0715569-0F88-5CAB-E9DB-2B93567FC610\",\"2C5FABD2-535F-8568-8E61-C643BA7D77A1\",\"E6E963E7-2DF6-80EE-2A61-FA86E0F3D5F2\",\"BDBD6CFA-2F4C-EEF7-C380-5E9BBF6A37B3\",\"7FE9306A-2659-4E62-1C2B-A09A600A1010\",\"B3EC1413-1A33-61E3-DDD1-CB4D0CFD0C6E\",\"23B65414-A7F9-21B4-A5A9-4F963B8C4ED9\",\"E1A8FA2E-6102-F4C6-209F-C589CD2149F2\",\"077A25D8-09D8-D5DE-42BC-A777BE3327D5\",\"0C8E0C13-A0C1-A4FC-F957-F595DA54E355\",\"BFB9E279-DD28-7172-4A52-2A1767AD7663\",\"CEEAE20E-D93E-2D04-13C6-B8BD5B336374\",\"E84E06C3-60AE-42B8-88BD-1BE52531C1FF\",\"CB5C52F0-5D84-0738-0DA6-0721B76AADB8\",\"C755CC24-7194-BAC4-A3C2-D79E1E3CC594\",\"D8084EB8-AAB0-75A8-7BDD-3DC075D1D919\",\"6C538322-CCFC-ABA2-3BC6-7048C9711ADF\",\"5CEEDD16-4467-2798-245F-57E63CFD7753\",\"A4853E63-0044-52F2-5420-E34B28387C9C\",\"8239D998-F8DF-10B0-24CF-4525FE03E760\",\"D0FCC667-4182-8F03-801E-22E11553B39E\",\"3CB2A1CD-83CA-C155-2675-7B7681E7B03F\",\"C15B77F2-7F7F-2385-BD1F-8A241FF7C1A3\",\"B98ABE87-00DA-4BCA-A3B3-3EB7DF9BE8D9\",\"D25A0998-D315-97F8-36DB-6951E981E54C\",\"2841A478-8E99-7A89-4879-309DFFE5DD61\",\"25C58C8A-D28B-DA99-97A3-F6544B4B8E8D\",\"2AA1BD3D-9318-431F-AB55-ECF4318BDC9F\",\"AC4084E2-06E3-FDD6-7F50-8C1E8090358C\",\"4B919471-E62F-F717-6AC8-DE2B10A2A1DC\",\"D38C457D-FC45-C068-5322-457E522651DC\",\"2DCB5CF2-8127-3826-CCAE-1C40C6746EE8\",\"21766DD3-0B62-C577-FB84-940C1B84711C\",\"ABF503E5-9741-C2BE-31B0-6E15AB50E2D6\",\"B203DE0A-EDD0-4295-1257-79A76917BE85\",\"65A88CCC-220E-3CBF-0D31-E0DF5BDD9C6F\",\"8B7DBACB-C18A-CA11-B0B8-3C481E76E30F\",\"45FB1520-F571-9E97-2EA3-B9C78AF89BEC\",\"E34E1E0D-55F8-3C19-8E7B-E42D8A3FEEB9\"],\"globalAttributeMap\":{},\"ip\":\"127.0.0.1\",\"mustChangePassword\":false,\"os\":\"Windows 10\",\"portalId\":\"1\",\"rolesName\":{\"44044800-B0EB-1003-55B5-954C3FFEA3B8\":\"EBOM瀵煎叆浜哄憳\",\"38FC5CC2-D880-A1C5-5DA0-C2F8B5082B52\":\"鏍″\",\"BA272199-5FF5-C513-F4FA-37F13A733FE8\":\"宸ヨ壓浜哄憳\",\"2761C8F4-6442-A53C-9F40-A1D5978E0799\":\"瀹℃牳\",\"DCF4961B-44DE-BA5B-F73C-8AA1EF1F1DB4\":\"gy1\",\"DA2608CC-07CB-A3FF-528B-CBE040BD7353\":\"缂栧埗\",\"A70A10D5-ED69-0CF5-8491-33D955569550\":\"浼氱\",\"CE4A351B-3669-9722-01AC-2E472B2900A5\":\"涓�鑸敤鎴穃",\"F5E11DDB-88E5-40F8-61B9-3F9E9ADAFFBF\":\"宸ヨ壓缁勯暱\",\"2DFA4811-B391-6727-33C6-697BF4E9A77D\":\"鎵瑰噯\",\"785F8459-DDEA-33D1-40D5-C3F6A42FABB1\":\"涓绘暟鎹甛",\"398B28CE-B1EE-FDEA-5B11-42908B8A3076\":\"PBOM绠$悊宀椾汉鍛榎"},\"sso\":false,\"token\":\"8b9f42164c6b7fd3ca532acf375626cd\",\"userId\":\"1\",\"userName\":\"娴嬭瘯\",\"userOid\":\"921D71F8-C2BB-3BCE-B744-AD0C3812F41A\",\"userSecret\":\"2\",\"usertype\":\"2\"}"); - if(!CollectionUtils.isEmpty(dataList)) { - Map data = dataList.get(0); - SessionInfo sessionInfo = WebUtil.jsonString2JavaBean((String)data.getOrDefault("JSONSTRING",""),SessionInfo.class); - return sessionInfo; + SessionInfo sessionInfo = null; + if(StringUtils.isNotBlank(userToken)){ + if(userToken.startsWith(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS)){ + sessionInfo = redisService.getCacheObject(userToken); + if(sessionInfo == null){ + throw new VciBaseException("token宸茶繃鏈燂紒"); + } + }else{ + //璇存槑鏄痡wt鐨則oken + String jwtToken = getSessionTokenKeyInRedis(userToken); + if(StringUtils.isBlank(jwtToken)){ + jwtToken = userToken; + } + sessionInfo = redisService.getCacheObject(jwtToken); + if(sessionInfo == null){ + throw new VciBaseException("token宸茶繃鏈燂紒"); + } + } } - return null; + return sessionInfo; } /** @@ -231,4 +258,88 @@ } } } + + /** + * 鍒涘缓璁稿彲鐨勪俊鎭紝骞跺瓨鍌ㄥ埌缂撳瓨涓� + * + * @param sessionInfo session鐨勪俊鎭� + * @return 璁稿彲淇℃伅 + */ + @Override + public TokenVO createToken(SessionInfo sessionInfo) { + return createToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo); + } + + /** + * 鍒涘缓璁稿彲鐨勪俊鎭紝骞跺瓨鍌ㄥ埌缂撳瓨涓� + * @param key token鍦╮edis涓殑key + * @param sessionInfo session鐨勪俊鎭� + * @return 璁稿彲淇℃伅 + */ + @Override + public TokenVO createToken(String key, SessionInfo sessionInfo) { + if(StringUtils.isBlank(sessionInfo.getToken())) { + String token = Md5.md5(VciBaseUtil.getPk() + "_" + sessionInfo.getUserId()); + sessionInfo.setToken(token); + } + if(StringUtils.isBlank(key)){ + key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS; + } + refreshToken(key, sessionInfo); + Map<String,Object> claimsMap = new HashMap<>(); + claimsMap.put(TokenKeyConstant.JWT_TOKEN_KEY,sessionInfo.getToken()); + claimsMap.put(TokenKeyConstant.JWT_USER_KEY,sessionInfo.getUserOid()); + claimsMap.put(TokenKeyConstant.JWT_USER_NAME_KEY,sessionInfo.getUserName()); + claimsMap.put(TokenKeyConstant.JWT_USER_CODE_KEY,sessionInfo.getUserId()); + TokenVO tokenVO = new TokenVO(); + tokenVO.setAccessToken(JwtUtils.createToken(claimsMap)); + tokenVO.setExpireTime(TokenKeyConstant.EXPIRATION); + return tokenVO; + } + + /** + * 鍒锋柊缂撳瓨涓殑token + * @param sessionInfo session鐨勪俊鎭� + */ + @Override + public void refreshToken(SessionInfo sessionInfo) { + refreshToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo); + } + + /** + * 鍒锋柊缂撳瓨涓殑token + * @param key token鍦╮edis涓殑key + * @param sessionInfo session鐨勪俊鎭� + */ + @Override + public void refreshToken(String key, SessionInfo sessionInfo) { + if(sessionInfo!=null && StringUtils.isNotBlank(sessionInfo.getToken())){ + if(StringUtils.isBlank(key)){ + key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS; + } + String redisKey = key + sessionInfo.getToken(); + redisService.setCacheObject(redisKey, sessionInfo, webProperties.getClientSessionAliveMax()!=0?webProperties.getClientSessionAliveMax(): TokenKeyConstant.EXPIRATION, TimeUnit.MINUTES); + + //鍥犱负鍙兘闇�瑕侀��鍑虹櫥褰曪紝鎴栧悓涓�鐢ㄦ埛鍙兘鍦ㄧ嚎涓�涓紝鏁呴渶瑕佸瓨鍌紝鐢ㄦ埛鍜宩wtToken鐨勫叧绯� + String tokenKey = CacheNameConstant.cacheKey(CacheNameConstant.USERID_TOKEN_KEY,sessionInfo.getUserId()); + redisService.setCacheObject(tokenKey, redisKey, webProperties.getClientSessionAliveMax()!=0?webProperties.getClientSessionAliveMax(): TokenKeyConstant.EXPIRATION, TimeUnit.MINUTES); + } + } + + /** + * jwt鐨則oken鏀规垚 + * @param jwtToken jwt鐨勮鍙� + * @return 鍦╮edis閲岀殑淇℃伅 + */ + private String getSessionTokenKeyInRedis(String jwtToken) { + if(StringUtils.isBlank(jwtToken)){ + return ""; + } + String key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS; + if(ControllerUtil.urlDecode(jwtToken).startsWith(key)){ + return ControllerUtil.urlDecode(jwtToken); + } + String userToken = JwtUtils.getUserToken(jwtToken); + return TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS + userToken; + } } diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java index e241856..79655e4 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/pagemodel/SmUserVO.java @@ -146,11 +146,6 @@ */ private String photo; - /** - * token鍊� - */ - private String token; - @Override public String getId() { return id; @@ -362,14 +357,6 @@ this.photo = photo; } - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - @Override public String toString() { return "SmUserVO{" + @@ -399,7 +386,6 @@ ", langCodeText='" + langCodeText + '\'' + ", lockFlag=" + lockFlag + ", photo='" + photo + '\'' + - ", token='" + token + '\'' + '}'; } } diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/bo/LoginResultBO.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/bo/LoginResultBO.java index 08973cb..7898b38 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/bo/LoginResultBO.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/bo/LoginResultBO.java @@ -1,6 +1,7 @@ package com.vci.web.bo; import com.vci.starter.web.pagemodel.SessionInfo; +import com.vci.starter.web.pagemodel.TokenVO; import java.util.Arrays; import java.util.Map; @@ -47,14 +48,14 @@ private String passwordInfo; /** - * 浼氳瘽淇℃伅 - */ - private SessionInfo sessionInfo; - - /** * 璇锋眰鐨勭浉鍏崇殑鍙傛暟 */ private Map<String,String[]> requestParams; + + /** + * 浠ょ墝淇℃伅 + */ + private TokenVO tokenVO; public boolean isSuccess() { return success; @@ -104,20 +105,20 @@ this.passwordInfo = passwordInfo; } - public SessionInfo getSessionInfo() { - return sessionInfo; - } - - public void setSessionInfo(SessionInfo sessionInfo) { - this.sessionInfo = sessionInfo; - } - public Map<String, String[]> getRequestParams() { return requestParams; } public void setRequestParams(Map<String, String[]> requestParams) { this.requestParams = requestParams; + } + + public TokenVO getTokenVO() { + return tokenVO; + } + + public void setTokenVO(TokenVO tokenVO) { + this.tokenVO = tokenVO; } @Override @@ -129,8 +130,8 @@ ", failMsgArray=" + Arrays.toString(failMsgArray) + ", mustChangePassword=" + mustChangePassword + ", passwordInfo='" + passwordInfo + '\'' + - ", sessionInfo=" + sessionInfo + ", requestParams=" + requestParams + + ", tokenVO=" + tokenVO + '}'; } } diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheNameConstant.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheNameConstant.java index 3b3072c..29676cc 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheNameConstant.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/CacheNameConstant.java @@ -109,6 +109,11 @@ public static final String VCI_USER_LOGIN = "vci_user_login:"; /** + * 鐢ㄦ埛ID鍜宼oken鍏崇郴鐨刱ey + */ + public static final String USERID_TOKEN_KEY = "userid_token_key:"; + + /** * 杩斿洖鎷兼帴鍚庣殑key * * @param cacheKey 缂撳瓨key diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/TokenKeyConstant.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/TokenKeyConstant.java deleted file mode 100644 index 6f7bd08..0000000 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/constant/TokenKeyConstant.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.vci.web.constant; - -/** - * token鐨勭浉鍏砶ey - * @author weidy - * @date 2019/11/7 10:10 AM - */ -public class TokenKeyConstant { - - /** - * 鐢ㄦ埛鐨則oken浼犺緭鏃朵娇鐢ㄧ殑鍚嶇О - */ - public static final String USER_TOKEN_KEY ="AuthorizationToken"; - - /** - * 绯荤粺鐨則oken浼犺緭鏃朵娇鐢ㄧ殑鍚嶇О - */ - public static final String SYSTEM_PRIVATE_KEY = "AuthorizationSystemToken"; - - /** - * 绯荤粺鐨勬棩蹇楅摼璺富閿紶杈撴椂浣跨敤鐨勫悕绉� - */ - public static final String LOG_TRACE_ID_KEY = "AuthorizationLogTraceId"; - - /** - * 鏃ュ織鐨勮拷韪富閿殑鍚嶇О - */ - public static final String TRACE_ID = "logTraceId"; - - /** - * 绯荤粺鐨勫璇弬鏁板悕绉� - */ - public static final String LANGUAGE_KEY = "vciLanguageCode"; - - /** - * 璇锋眰鐨勬椂闂村弬鏁� - */ - public static final String REQUEST_TIMESTAMP = "vciHttpStartRequestTime"; - -} diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java index 87d292d..8f8310a 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/LoginController.java @@ -133,7 +133,7 @@ if(!loginResultBO.isSuccess()){ msg = loginResultBO.getFailMsg(); }else { - token = loginResultBO.getSessionInfo().getToken(); + token = loginResultBO.getTokenVO().getAccessToken(); } }catch (Throwable e){ msg = LangBaseUtil.getErrorMsg(e); @@ -196,7 +196,7 @@ msg = loginResultBO.getFailMsg(); return BaseResult.fail(msg); }else { - token = loginResultBO.getSessionInfo().getToken(); + token = loginResultBO.getTokenVO().getAccessToken(); msg="鐧诲綍鎴愬姛锛�"; } }catch (Throwable e){ @@ -297,7 +297,7 @@ @ResponseBody public BaseResult getSessionInfo(){ BaseResult<SessionInfo> json = new BaseResult<>(); - json.setObj(WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get()); + json.setObj(WebThreadLocalUtil.getCurrentUserSessionInfoInThread()); if(json.getObj()!=null){ json.setSuccess(true); } diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LoginServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LoginServiceI.java index 5b63e6c..deb8d8a 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LoginServiceI.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/LoginServiceI.java @@ -38,32 +38,4 @@ * @throws VciBaseException 鍒犻櫎浼氳瘽淇℃伅鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父 */ void logout(String userToken) throws VciBaseException; - - /** - * 鍒锋柊token - * @param sessionInfo session鐨勪俊鎭� - */ - void refreshToken(SessionInfo sessionInfo); - - /** - * 鍒锋柊token - * @param key token鍦╮edis涓殑key - * @param sessionInfo session鐨勪俊鎭� - */ - void refreshToken(String key, SessionInfo sessionInfo); - - /** - * 鍒涘缓璁稿彲鐨勪俊鎭� - * @param sessionInfo session鐨勪俊鎭� - * @return 璁稿彲淇℃伅 - */ - TokenVO createToken(SessionInfo sessionInfo) ; - - /** - * 鍒涘缓璁稿彲鐨勪俊鎭� - * @param key token鍦╮edis涓殑key銆� - * @param sessionInfo session鐨勪俊鎭� - * @return 璁稿彲淇℃伅 - */ - TokenVO createToken(String key, SessionInfo sessionInfo) ; } diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java index 17aa5b1..5d8706a 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/LoginServiceImpl.java @@ -19,10 +19,7 @@ import com.vci.starter.web.pagemodel.RequestClientInfo; import com.vci.starter.web.pagemodel.SessionInfo; import com.vci.starter.web.pagemodel.TokenVO; -import com.vci.starter.web.util.ApplicationContextProvider; -import com.vci.starter.web.util.JwtUtils; -import com.vci.starter.web.util.Md5; -import com.vci.starter.web.util.VciBaseUtil; +import com.vci.starter.web.util.*; import com.vci.web.bo.LoginResultBO; import com.vci.web.constant.CacheNameConstant; import com.vci.web.dto.LoginUserDTO; @@ -142,15 +139,17 @@ } //闇�瑕佺湅鐪嬫槸鍚﹀凡缁忕櫥褰曚簡 - String loginKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_LOGIN, userDTO.getUserId()); - if(redisService.hasKey(loginKey) && !userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()){ + String userIdTokenKey = CacheNameConstant.cacheKey(CacheNameConstant.USERID_TOKEN_KEY, userDTO.getUserId().trim()); + if(redisService.hasKey(userIdTokenKey) && !userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()){ loginResult.setFailCode(USER_IS_LOGINED); loginResult.setFailMsg("褰撳墠鐢ㄦ埛宸茬粡鍦ㄥ叾浠栧湴鏂圭櫥褰曪紒"); return loginResult; } //璇存槑宸茬粡鐧诲綍浜嗭紝閭e簲璇ュ彇娑堝師鏉ョ殑鐧诲綍 - if (redisService.hasKey(loginKey) && userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) { - redisService.deleteObject(CacheNameConstant.VCI_USER_LOGIN); + if (redisService.hasKey(userIdTokenKey) && userDTO.isForceLogin() && securityManageProperties.isUserOneLogin()) { + String tokenKey = redisService.getCacheObject(userIdTokenKey); + redisService.deleteObject(tokenKey); + redisService.deleteObject(userIdTokenKey); } //2.鑾峰彇鐢ㄦ埛鐨勫璞�. @@ -308,10 +307,10 @@ loginResult.setSuccess(true); sessionInfo.setToken(Md5.md5(VciBaseUtil.getPk() + "_" + user.getId())); - loginResult.setSessionInfo(sessionInfo); //娣诲姞鍒颁細璇濅俊鎭� - saveSessionInfo(sessionInfo); + TokenVO tokenVO = saveSessionInfo(sessionInfo); + loginResult.setTokenVO(tokenVO); return loginResult; } @@ -322,14 +321,7 @@ * @Return com.vci.frameworkcore.pagemodel.SmUserVO */ private SmUserVO getUserByUserId(String userId) { - String userKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER,userId); - String userOid = redisService.getCacheObject(userKey); - String oidKey = CacheNameConstant.cacheKey(CacheNameConstant.VCI_USER_OID, userOid); - SmUserVO userVO = redisService.getCacheObject(oidKey); - if(userVO == null || StringUtils.isBlank(userVO.getOid())){ - userVO = userQueryService.getUserByUserId(userId); - } - return userVO; + return userQueryService.getUserByUserId(userId); } @@ -403,16 +395,11 @@ * 淇濆瓨浼氳瘽淇℃伅 * @param sessionInfo 浼氳瘽淇℃伅 */ - private void saveSessionInfo(SessionInfo sessionInfo){ + private TokenVO saveSessionInfo(SessionInfo sessionInfo){ if(sessionForLogin == null){ throw new VciBaseException("娌℃湁閰嶇疆浼氳瘽瀛樺偍鐨勬湇鍔�"); } - //灏嗘潈闄愪俊鎭紝鏀惧叆redis缂撳瓨涓�備互闃叉session涓殑淇℃伅杩囧锛屽瓨鍏ユ暟鎹簱涓嚭鐜伴敊璇� - redisService.setCacheList(sessionInfo.getToken(),sessionInfo.getFunctionOids()); - redisService.expire(sessionInfo.getToken(), 1, TimeUnit.HOURS); - - sessionInfo.setFunctionOids(new ArrayList<>()); - sessionForLogin.saveSessionInfo(sessionInfo); + return sessionForLogin.createToken(sessionInfo); } /** @@ -462,6 +449,7 @@ sessionInfo.setRtxNo(user.getRtxNo()); sessionInfo.setIMId(user.getIMNo()); sessionInfo.setPortalId(user.getId()); + sessionInfo.setLastLoginTime(user.getLastLoginTime()!=null?user.getLastLoginTime().getTime(): VciDateUtil.getNowTime()); } /** @@ -494,69 +482,6 @@ */ private void updateUserForLoginSuccess(String userOid){ userQueryService.updateUserLoginTime(userOid); - } - - /** - * 鍒涘缓璁稿彲鐨勪俊鎭� - * - * @param sessionInfo session鐨勪俊鎭� - * @return 璁稿彲淇℃伅 - */ - @Override - public TokenVO createToken(SessionInfo sessionInfo) { - return createToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo); - } - - /** - * 鍒涘缓璁稿彲鐨勪俊鎭� - * @param key token鍦╮edis涓殑key - * @param sessionInfo session鐨勪俊鎭� - * @return 璁稿彲淇℃伅 - */ - @Override - public TokenVO createToken(String key, SessionInfo sessionInfo) { - if(StringUtils.isBlank(sessionInfo.getToken())) { - String token = Md5.md5(VciBaseUtil.getPk() + "_" + sessionInfo.getUserId()); - sessionInfo.setToken(token); - } - if(StringUtils.isBlank(key)){ - key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS; - } - refreshToken(key, sessionInfo); - Map<String,Object> claimsMap = new HashMap<>(); - claimsMap.put(TokenKeyConstant.JWT_TOKEN_KEY,sessionInfo.getToken()); - claimsMap.put(TokenKeyConstant.JWT_USER_KEY,sessionInfo.getUserOid()); - claimsMap.put(TokenKeyConstant.JWT_USER_NAME_KEY,sessionInfo.getUserName()); - claimsMap.put(TokenKeyConstant.JWT_USER_CODE_KEY,sessionInfo.getUserId()); - TokenVO tokenVO = new TokenVO(); - tokenVO.setAccessToken(JwtUtils.createToken(claimsMap)); - tokenVO.setExpireTime(TokenKeyConstant.EXPIRATION); - return tokenVO; - } - - /** - * 鍒锋柊token - * @param sessionInfo session鐨勪俊鎭� - */ - @Override - public void refreshToken(SessionInfo sessionInfo) { - refreshToken(TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS, sessionInfo); - } - - /** - * 鍒锋柊token - * @param key token鍦╮edis涓殑key - * @param sessionInfo session鐨勪俊鎭� - */ - @Override - public void refreshToken(String key, SessionInfo sessionInfo) { - if(sessionInfo!=null && StringUtils.isNotBlank(sessionInfo.getToken())){ - if(StringUtils.isBlank(key)){ - key = TokenKeyConstant.TOKEN_KEY_PREFIX_IN_REDIS; - } - String redisKey = key + sessionInfo.getToken(); - redisService.setCacheObject(redisKey, sessionInfo, webProperties.getClientSessionAliveMax()!=0?webProperties.getClientSessionAliveMax(): TokenKeyConstant.EXPIRATION, TimeUnit.MINUTES); - } } /** diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsStatusServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsStatusServiceImpl.java index 0d2719c..88094a0 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsStatusServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsStatusServiceImpl.java @@ -322,7 +322,7 @@ statePool.name = statusDTO.getId(); statePool.description = statusDTO.getDescription()==null?"":statusDTO.getDescription(); String userId = VciBaseUtil.getCurrentUserId(); - long now = VciDateUtil.getTime(VciDateUtil.getNow()); + long now = VciDateUtil.getNowTime(); statePool.creator = userId; statePool.createTime = now; statePool.modifier = userId; diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBtmIOServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBtmIOServiceImpl.java index 1d5153f..b95a7d5 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBtmIOServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebBtmIOServiceImpl.java @@ -259,7 +259,7 @@ List<LifeCycle> unExistLifeCycleList = new ArrayList<LifeCycle>(); List<LifeCycle> editLifeCycleList = new ArrayList<LifeCycle>(); String userId = WebUtil.getCurrentUserId(); - long now = VciDateUtil.getTime(VciDateUtil.getNow()); + long now = VciDateUtil.getNowTime(); //寰幆鍒嗘瀽闇�瑕佹坊鍔犺繕鏄慨鏀� for(OsLifeCycleDTO lifeCycleDTO : lifeCycleDTOList){ String lifeCycleId = lifeCycleDTO.getId().toLowerCase().trim(); @@ -378,7 +378,7 @@ List<AttributeDef> unExistAttrList = new ArrayList<AttributeDef>(); List<AttributeDef> editAttrList = new ArrayList<AttributeDef>(); String userId = WebUtil.getCurrentUserId(); - long now = VciDateUtil.getTime(VciDateUtil.getNow()); + long now = VciDateUtil.getNowTime(); //寰幆鍒嗘瀽闇�瑕佹坊鍔犺繕鏄慨鏀� for (OsAttributeDTO attributeDTO : attributeDTOList) { String attrId = attributeDTO.getId().toLowerCase().trim(); @@ -578,7 +578,7 @@ List<BizType> unExistBtmList = new ArrayList<BizType>(); List<BizType> editBtmList = new ArrayList<BizType>(); String userId = WebUtil.getCurrentUserId(); - long now = VciDateUtil.getTime(VciDateUtil.getNow()); + long now = VciDateUtil.getNowTime(); for (OsBtmTypeDTO btmTypeDTO : btmTypeDTOList) { String btmId = btmTypeDTO.getId().toLowerCase().trim(); @@ -1210,7 +1210,7 @@ List<LinkType> addLinkTypeList = new ArrayList<LinkType>(); List<LinkType> editLinkTypeList = new ArrayList<LinkType>(); String userId = WebUtil.getCurrentUserId(); - long now = VciDateUtil.getTime(VciDateUtil.getNow()); + long now = VciDateUtil.getNowTime(); for(OsLinkTypeDTO linkTypeDTO : linkTypeDTOS){ String linkId = linkTypeDTO.getId().toLowerCase().trim(); LinkType linkType = null; diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebContextInfoFetcher.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebContextInfoFetcher.java index 34d927f..4e4fe39 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebContextInfoFetcher.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebContextInfoFetcher.java @@ -28,7 +28,7 @@ @Override @VciUnLog public InvocationInfo getInvocationInfo() { - SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get(); + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); if(sessionInfo == null){ return ClientSessionUtility.getInvocation(); }else { @@ -61,6 +61,6 @@ * @return 浼氳瘽鐨勫璞� */ public SessionInfo getSessionInfo() { - return WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get(); + return WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); } } diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java index 5d73662..65827a3 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLoServiceImpl.java @@ -414,7 +414,7 @@ clo.setCreator(WebUtil.getCurrentUserId()); } if(clo.getCreateTime() == 0){ - clo.setCreateTime(VciDateUtil.getTime(VciDateUtil.getNow())); + clo.setCreateTime(VciDateUtil.getNowTime()); } if(StringUtils.isBlank(clo.getLastModifier())){ clo.setLastModifier(clo.getCreator()); @@ -481,7 +481,7 @@ newClo.setLinkObject(lo); newClo.setOid((new ObjectUtility()).getNewObjectID36()); newClo.setCreator(WebUtil.getCurrentUserId()); - newClo.setCreateTime(VciDateUtil.getTime(VciDateUtil.getNow())); + newClo.setCreateTime(VciDateUtil.getNowTime()); newClo.setLastModifier(newClo.getCreator()); newClo.setLastModifyTime(newClo.getCreateTime()); newClo.setTs(newClo.getCreateTime()); diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLogServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLogServiceImpl.java index 0ea5c4b..144b948 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLogServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebLogServiceImpl.java @@ -41,7 +41,7 @@ @Override public void addOperateLog(VciLogObjectBO logObject) { //VCIInvocationInfo vcii = WebThreadLocalUtil.getCurrentUserInvocationInfoInThread().get(); - SessionInfo si = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get(); + SessionInfo si = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); if(si!=null){ logObject.setUserId(si.getUserId()); logObject.setUserName(si.getUserName()); @@ -91,7 +91,7 @@ UserEntityInfo ue = new UserEntityInfo(); ue.modules = log.getModelName(); ue.userName = log.getUserId(); - WebThreadLocalUtil.getCurrentUserSessionInfoInThread().set(si); + WebThreadLocalUtil.setCurrentUserSessionInfoInThread(si); if(log.isDebug()){ log.setDescription(log.getDescription() + "," + log.getController() + "/" + log.getMethod()); } diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/WebUtil.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/WebUtil.java index 15dd76a..6dbfdcb 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/WebUtil.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/WebUtil.java @@ -187,7 +187,7 @@ * @return 鐢ㄦ埛瀵硅薄锛屼絾鏄笉鎶涘嚭寮傚父 */ public static SessionInfo getCurrentUserSessionInfoNotException() { - return WebThreadLocalUtil.getCurrentUserSessionInfoInThread().get(); + return WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); } /** @@ -195,7 +195,7 @@ * @param sessionInfo 浼氳瘽淇℃伅 */ public static synchronized void setSessionInfo(SessionInfo sessionInfo){ - WebThreadLocalUtil.getCurrentUserSessionInfoInThread().set(sessionInfo); + WebThreadLocalUtil.setCurrentUserSessionInfoInThread(sessionInfo); } /** diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml b/Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml index 5b48f4c..0ac1964 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml @@ -73,9 +73,16 @@ ##web閰嶇疆 vciweb: debug: true + file-preview: enabled: true preview-service-url: "http://dev.yunkeruida.top:28090/vciFilePreview/ajaxPreview.html" preview-system-key: plt2020 +vcispringmvc: + enabled: true + #涓嶆牎楠屽畨鍏ㄧ殑閾炬帴鍦板潃 + un-check-urls: + #涓嶆洿鏂拌姹傛椂闂寸殑閾炬帴鍦板潃 + un-storage-request-time-urls: -- Gitblit v1.9.3