From 2e5389660d216dabf6ebee15e7a3fa6eab73d01d Mon Sep 17 00:00:00 2001 From: fs-danaus <danaus314@qq.com> Date: 星期一, 26 六月 2023 10:13:32 +0800 Subject: [PATCH] 会话失效时websocket发送通知 --- src/com/yc/action/login/LoginAction.java | 78 +++++++++++++++++++++++++++------------ 1 files changed, 54 insertions(+), 24 deletions(-) diff --git a/src/com/yc/action/login/LoginAction.java b/src/com/yc/action/login/LoginAction.java index 6cde251..dfdbb60 100644 --- a/src/com/yc/action/login/LoginAction.java +++ b/src/com/yc/action/login/LoginAction.java @@ -17,6 +17,7 @@ import com.yc.exception.CallBackMessage; import com.yc.factory.FactoryBean; import com.yc.factory.InitSystem; +import com.yc.im.util.RedisSocket; import com.yc.jpush.JpushAction; import com.yc.listener.SessionListener; import com.yc.multiData.MultiDataSource; @@ -25,6 +26,7 @@ import com.yc.sdk.WebSocketMessage.action.WebSocketMessageServer; import com.yc.sdk.WebSocketMessage.entity.MessageInfo; import com.yc.sdk.WebSocketMessage.entity.MessageType; +import com.yc.sdk.WebSocketMessage.entity.WsMessageUserEntity; import com.yc.sdk.gaodemap.action.GdMapServiceInit; import com.yc.sdk.gaodemap.api.GdMapService; import com.yc.sdk.gaodemap.entity.GdErrorException; @@ -47,6 +49,7 @@ import com.yc.utils.*; import eu.bitwalker.useragentutils.UserAgent; import me.chanjar.weixin.common.util.http.URIUtil; +import okio.Source; import org.apache.commons.lang.StringUtils; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -61,7 +64,6 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -459,9 +461,13 @@ printJson(response, callBackMessage.sendErrorMessage(error,-1005)); return null; } + }else{ + this.singleAccount(isApp ? "2" : "1", dbId, userAccount, request); } - } + }else { + //闄愬埗澶氳澶囩櫥褰� this.singleAccount(isApp ? "2" : "1", dbId, userAccount, request); + } } processLoginUserToSessionV2(ip, dbId, request, userAccount); //------------------------------- @@ -627,34 +633,30 @@ private void singleAccount(String userFromType,String dbId, UserAccountEntity userAccount, HttpServletRequest request){ HttpSession session = request.getSession(); List<OnlineUserEntity> onLineUser = SessionListener.getOnLineUser(request, dbId);//tomcat闆嗙兢鏄噰鐢ㄤ細璇濆鍒讹紝鎵�浠ユ瘡涓猼omcat閲岀殑浼氳瘽淇℃伅鏄竴鏍凤紝鍙栧埌鍚屼竴鏁版嵁婧愭墍鏈変細璇濓紝浠庝腑鍙栧埌褰撳墠鐢ㄦ埛鐨勪細璇� - OnlineUserEntity perUserEntity=null;//鍓嶄竴涓細璇� if(onLineUser!=null&&onLineUser.size()>0) { for(OnlineUserEntity entity:onLineUser){ if(entity.getUserCode().equalsIgnoreCase(userAccount.getUserCode()) &&userFromType.equalsIgnoreCase(entity.getLoginType()+"")//鎸囨槑鏄疨C,杩樻槸APP绔� &&!session.getId().equalsIgnoreCase(entity.getSessionId())//鎺掗櫎褰撳墠鐨勪細璇濓紝鍙栧悓璐﹀彿鐨勪箣鍓嶄細璇� ){ - perUserEntity=entity; - break; + //鍙浼氳瘽瀛樺湪锛屽彂webSocket鍥炲埌鐧诲綍鐣岄潰 + //---閫氱煡webscoket + MessageInfo messageInfo = new MessageInfo(); + messageInfo.setDbId(Integer.parseInt(dbId)); + messageInfo.setMsgType(MessageType.RETURN_LOGIN_PAGE); + messageInfo.setUserFromType(userFromType); + messageInfo.setUserCode(entity.getUserCode()); + messageInfo.setSessionId(entity.getSessionId()); + if(userFromType.equalsIgnoreCase("1")) {//PC绔� + messageInfo.setMsg("鎮ㄧ殑璐﹀彿宸插湪鍏朵粬鍦版柟鐧诲綍"); + }else{ + messageInfo.setMsg("鎮ㄧ殑璐﹀彿宸插湪鍏朵粬璁惧鐧诲綍"); } + WebSocketMessageServer.publishMessageToRedis(messageInfo); + } } } - if(perUserEntity!=null){ - //鍙浼氳瘽瀛樺湪锛屽彂webSocket鍥炲埌鐧诲綍鐣岄潰 - //---閫氱煡webscoket - MessageInfo messageInfo = new MessageInfo(); - messageInfo.setDbId(Integer.parseInt(dbId)); - messageInfo.setMsgType(MessageType.ONLY_ONE_ACCOUNT); - messageInfo.setUserFromType(userFromType); - messageInfo.setUserCode(perUserEntity.getUserCode()); - messageInfo.setSessionId(perUserEntity.getSessionId()); - if(userFromType.equalsIgnoreCase("1")) {//PC绔� - messageInfo.setMsg("鎮ㄧ殑璐﹀彿宸插湪鍏朵粬鍦版柟鐧诲綍"); - }else{ - messageInfo.setMsg("鎮ㄧ殑璐﹀彿宸插湪鍏朵粬璁惧鐧诲綍"); - } - WebSocketMessageServer.publishMessageToRedis(messageInfo); - } + } private String genToken(String pwd, String usercode, int dbid) { @@ -795,8 +797,8 @@ } finally{ SpObserver.setDBtoInstance(); } - if (dataSourceMap.isLoginOnceForOneUserCode()&& org.apache.commons.lang3.StringUtils.isNotBlank(userEntity.getUniqueIdentifier()) &&request.getParameter("isApp") != null || request.getAttribute("isApp") != null) { - //鏄惁鍚敤闄愬埗澶氳澶囩櫥褰曚篃闇�瑕佽褰� + // if (dataSourceMap.isLoginOnceForOneUserCode() &&request.getAttribute("loginByCode") != null) { + //鍚敤闄愬埗澶氳澶囩櫥褰�,涓旈�氳繃鐭俊浜屾楠岃瘉鐧诲綍 try { SpObserver.setDBtoDemo(); userEntity.setTelePhone(userAccount.getApp_userCode());//鎵嬫満鍙� @@ -804,7 +806,7 @@ } finally { SpObserver.setDBtoInstance(); } - } + // } return true; } @@ -1431,8 +1433,36 @@ } catch (Exception ex) { this.print2(response, ex.getMessage(), request.getParameter("redirect"), isApp); } + if (isApp) { + session.setAttribute(SessionKey.USER_LOGIN_TYPE, SessionKey.USER_LOGIN_TYPE_APP);//app 绫诲瀷 + //鍒ゆ柇褰撳墠鐧诲綍璁惧鏄惁涓庢渶鏂颁竴娆$櫥褰曡澶囨槸涓�鏍凤紝涓嶄竴鏍烽渶瑕佽繑鍥炵粰鍓嶇锛岃緭鍑虹煭淇¤繘琛岄獙璇佺櫥褰� + + } else { + session.setAttribute(SessionKey.USER_LOGIN_TYPE, SessionKey.USER_LOGIN_TYPE_WEB);//web 绫诲瀷 + } + final DataSourceEntity dataSourceMap = MultiDataSource.getDataSourceMap(dbid); + //--------------------------------- + if(dataSourceMap.isLoginOnceForOneUserCode()) { + //闄愬埗澶氳澶囩櫥褰� + this.singleAccount(isApp ? "2" : "1", dbid, userAccount, request); + } // 璁剧疆鏉冮檺 processLoginUserToSessionV2(ip, dbid, request, userAccount); + //鎶婃柊浼氳瘽id鏇挎崲websocket涓搴旂敤鎴风殑浼氳瘽id锛� + //--鍚屼竴鐢ㄦ埛閲嶆柊杩炴帴锛屽鏋滃瓨鍦ㄥ凡鏈変細璇濇槸鎵撳紑鐘舵�侊紝鍒欏垹闄よ繖涓細璇濓紝鍚敤鏂颁細璇� + if(WebSocketMessageServer.getOnlineUserList()!=null&&WebSocketMessageServer.getOnlineUserList().size()>0) { + String key = RedisSocket.CHANEL_WS_MESSAGES + ":" + dbid + ":1:" + usercode + ":"; + for (Map.Entry<String, WsMessageUserEntity> entry : WebSocketMessageServer.getOnlineUserList().entrySet()) { + if (entry.getKey().contains(key)) { + if (entry.getValue().getSession().isOpen()) { + WsMessageUserEntity wsMessageUser= entry.getValue(); + wsMessageUser.setSessionId(session.getId()); + WebSocketMessageServer.getOnlineUserList().put(key+session.getId(),wsMessageUser); + break; + } + } + } + } callBackMessage.sendSuccessMessage("鐧诲綍鎴愬姛"); this.printJson(response, callBackMessage.toString()); return null; -- Gitblit v1.8.0