diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java b/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java index 20559ee6..5db60e49 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java @@ -231,10 +231,10 @@ public class LoginController extends BaseController{ Session session = UserUtils.getSession(); // 是否是登录操作 - boolean isLogin = "true".equals(loginInfo.getParam("__login")); + boolean isLogin = "true".equals(session.getAttribute("__login")); if (isLogin){ // 获取后接着清除,防止下次获取仍然认为是登录状态 - loginInfo.getParams().remove("__login"); + session.removeAttribute("__login"); // 设置共享SessionId的Cookie值(第三方系统使用) String cookieName = Global.getProperty("session.shareSessionIdCookieName"); if (StringUtils.isNotBlank(cookieName)){ diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/web/OnlineController.java b/modules/core/src/main/java/com/jeesite/modules/sys/web/OnlineController.java index a76a9b9f..f14c61fd 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/web/OnlineController.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/web/OnlineController.java @@ -25,6 +25,8 @@ import org.springframework.web.bind.annotation.ResponseBody; import com.beust.jcommander.internal.Lists; import com.beust.jcommander.internal.Maps; +import com.jeesite.common.cache.CacheUtils; +import com.jeesite.common.collect.MapUtils; import com.jeesite.common.config.Global; import com.jeesite.common.lang.DateUtils; import com.jeesite.common.lang.ObjectUtils; @@ -145,6 +147,17 @@ public class OnlineController extends BaseController{ public String tickOut(String sessionId) { Session session = sessionDAO.readSession(sessionId); if (session != null){ + @SuppressWarnings("unchecked") + Map onlineTickOutMap = (Map)CacheUtils.get("onlineTickOutMap"); + if (onlineTickOutMap == null){ + onlineTickOutMap = MapUtils.newConcurrentMap(); + } + PrincipalCollection pc = (PrincipalCollection)session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY); + LoginInfo principal = (pc != null ? (LoginInfo)pc.getPrimaryPrincipal() : null); + if (principal != null){ + onlineTickOutMap.put(principal.getId()+"_"+principal.getParam("deviceType", "PC"), StringUtils.EMPTY); + } + CacheUtils.put("onlineTickOutMap", onlineTickOutMap); sessionDAO.delete(session); return renderResult(Global.TRUE, "踢出已成功!"); } diff --git a/modules/core/src/main/resources/i18n/core/common/i18n_zh_CN.properties b/modules/core/src/main/resources/i18n/core/common/i18n_zh_CN.properties index 308883e9..f84d3b4f 100644 --- a/modules/core/src/main/resources/i18n/core/common/i18n_zh_CN.properties +++ b/modules/core/src/main/resources/i18n/core/common/i18n_zh_CN.properties @@ -16,6 +16,7 @@ sys.login.accountDisabled=该帐号已停用。 sys.login.accountFreezed=该帐号已冻结。 sys.login.accountAudited=该帐号待审核。 sys.login.accountInvalid=该帐号无效。 +sys.login.tickOutMessage=账号已被管理员移出在线,请重新登录。 sys.login.multiAddrMessage=账号已在其它地方登录,请重新登录。 sys.login.failedNumLock=登录失败,尝试次数过多,账号已锁定,请 {0} 分钟后重试.