记住我的账号,使用在线列表踢出用户无效问题修正。

This commit is contained in:
thinkgem
2018-08-19 17:32:58 +08:00
parent 09286c8287
commit 28e1cd6f1d
3 changed files with 16 additions and 2 deletions

View File

@@ -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)){

View File

@@ -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<String, String> onlineTickOutMap = (Map<String, String>)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, "踢出已成功!");
}

View File

@@ -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} 分钟后重试.