package com.iplatform.base.support.strategy; import com.iplatform.model.po.S_user_login; import com.walker.infrastructure.utils.DateUtils; import com.walker.web.ClientType; /** * Web(PC)端,登录策略:只能登录一次实现 * @author 时克英 * @date 2023-09-08 */ public class WebOnceLoginStrategy extends MobileOnceLoginStrategy{ @Override public boolean allowLogin(String loginId, String clientType) { if(this.tokenExpireWeb == 0){ throw new IllegalArgumentException("请先配置bean属性:tokenExpireMobile"); } if(!clientType.equals(ClientType.INDEX_PC)){ // 非PC端,不检测 return true; } S_user_login login = this.getUserLoginCache().getUserLogin(loginId); if(login == null){ logger.debug("缓存中没有登录记录,允许登录,loginId={}", loginId); return true; } // 检查是否登录超时,根据记录中更新时间,对比移动端token是否失效。 // 毫秒转换成分钟 long spanTime = (System.currentTimeMillis() - DateUtils.toMillSeconds(login.getUpdate_time())) / 60000; if(spanTime <= this.tokenExpireWeb){ logger.debug("登录在token范围内,不允许登录,loginId={}", login); return false; } return true; } public long getTokenExpireWeb() { return tokenExpireWeb; } public void setTokenExpireWeb(long tokenExpireWeb) { this.tokenExpireWeb = tokenExpireWeb; } private long tokenExpireWeb = 600; // PC端默认2小时 }