|
@@ -3,7 +3,6 @@ package com.jiayue.ssi.handler;
|
|
|
import java.io.IOException;
|
|
|
import java.util.Date;
|
|
|
import java.util.Iterator;
|
|
|
-import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
@@ -16,11 +15,13 @@ import com.jiayue.ssi.constant.CacheConstants;
|
|
|
import com.jiayue.ssi.constant.Constants;
|
|
|
import com.jiayue.ssi.constant.LoginConstants;
|
|
|
import com.jiayue.ssi.constant.SecretKeyConstants;
|
|
|
+import com.jiayue.ssi.dto.ActiveUserDto;
|
|
|
import com.jiayue.ssi.dto.UserVisitInfoDto;
|
|
|
-import com.jiayue.ssi.entity.SysAlarm;
|
|
|
+import com.jiayue.ssi.entity.SysLogininfor;
|
|
|
import com.jiayue.ssi.entity.SysPolicy;
|
|
|
import com.jiayue.ssi.factory.LoginFactory;
|
|
|
import com.jiayue.ssi.service.SysAlarmService;
|
|
|
+import com.jiayue.ssi.service.SysLogininforService;
|
|
|
import com.jiayue.ssi.service.SysPolicyService;
|
|
|
import com.jiayue.ssi.service.SysUserService;
|
|
|
import com.jiayue.ssi.util.*;
|
|
@@ -100,10 +101,12 @@ public class CustomAuthenticationSuccessHandler extends SavedRequestAwareAuthent
|
|
|
if (CacheConstants.LOGIN_TOKEN_MAP.get(username)!=null){
|
|
|
// 将之前用户登录过的ip删除掉
|
|
|
Iterator<Map.Entry<String, String>> countMap = CacheConstants.IP_USER_MAP.entrySet().iterator();
|
|
|
+ String kickedIp = "";
|
|
|
while (countMap.hasNext()) {
|
|
|
Map.Entry<String, String> entry = countMap.next();
|
|
|
String cacheusername = entry.getValue();
|
|
|
if (cacheusername.equals(username)){
|
|
|
+ kickedIp = entry.getKey();
|
|
|
countMap.remove();
|
|
|
}
|
|
|
}
|
|
@@ -137,20 +140,51 @@ public class CustomAuthenticationSuccessHandler extends SavedRequestAwareAuthent
|
|
|
// }
|
|
|
}
|
|
|
else if ("1".equals(noticeWay)){
|
|
|
- // 告警
|
|
|
- SysAlarm sysAlarm = new SysAlarm();
|
|
|
- sysAlarm.setAlarmContent("账号【"+sysUser.getUsername()+"】多点登录");
|
|
|
- sysAlarm.setReadSign("0");
|
|
|
- // 低于策略设定值则告警
|
|
|
- sysAlarmService.save(sysAlarm);
|
|
|
+ log.info("发送邮箱通知系统管理员后台输出======> "+"账号【"+sysUser.getUsername()+"】多点登录","本次登录时间:"+DateUtils.getTime()+",登录IP:"+IPUtils.getIpAddr(request));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 封装被下线的对象退出信息
|
|
|
+ SysLogininfor logininfor = new SysLogininfor();
|
|
|
+ logininfor.setUserName(sysUser.getUsername());
|
|
|
+ logininfor.setIpaddr(kickedIp);
|
|
|
+ String address = AddressUtils.getRealAddressByIP(kickedIp);
|
|
|
+ logininfor.setLoginLocation(address);
|
|
|
+ HttpServletRequest kickedRequest = CacheConstants.KICKED_USER_MAP.get(sysUser.getUsername());
|
|
|
+ // 获取被踢用户的request
|
|
|
+ final UserAgent kickedUserAgent = UserAgent.parseUserAgentString(kickedRequest.getHeader("User-Agent"));
|
|
|
+ logininfor.setBrowser(kickedUserAgent.getBrowser().getName());
|
|
|
+ logininfor.setOs(kickedUserAgent.getOperatingSystem().getName());
|
|
|
+ logininfor.setMsg("退出成功");
|
|
|
+ logininfor.setLoginTime(new Date());
|
|
|
+ logininfor.setCreateBy(sysUser.getUsername());
|
|
|
+ // 日志状态
|
|
|
+ logininfor.setStatus(Constants.SUCCESS);
|
|
|
+ // 插入数据
|
|
|
+ SpringUtils.getBean(SysLogininforService.class).insertLogininfor(logininfor);
|
|
|
+
|
|
|
+ Iterator<Map.Entry<String, String>> socketSessionMap = CacheConstants.SESSIONID_USER_MAP.entrySet().iterator();
|
|
|
+ while (socketSessionMap.hasNext()) {
|
|
|
+ Map.Entry<String, String> entry2 = socketSessionMap.next();
|
|
|
+ String cacheusername = entry2.getValue();
|
|
|
+ if (cacheusername.equals(sysUser.getUsername())) {
|
|
|
+ socketSessionMap.remove();
|
|
|
+ }
|
|
|
}
|
|
|
+ System.out.println(CacheConstants.SESSIONID_USER_MAP.toString());
|
|
|
+// System.out.println("被踢用户的sessionid:"+kickedRequest.getSession().getId());
|
|
|
+// CacheConstants.SESSIONID_USER_MAP.put(kickedRequest.getSession().getId(),sysUser.getUsername());
|
|
|
}
|
|
|
CacheConstants.LOGIN_TOKEN_MAP.put(username,token);
|
|
|
// 登录成功后将用户本次操作时间存入缓存,为了判断非活动退出时应用,60分钟自动失效
|
|
|
LocalCache.set(CacheConstants.REACTIVE_KEY + token,vtime,1000*60*60);
|
|
|
// 将登录成功的用户ip加入缓存中
|
|
|
CacheConstants.IP_USER_MAP.put(ip,username);
|
|
|
-
|
|
|
+ ActiveUserDto activeUserDto = new ActiveUserDto();
|
|
|
+ activeUserDto.setSysUser(sysUser);
|
|
|
+ activeUserDto.setHttpServletRequest(request);
|
|
|
+ activeUserDto.setLoginTime(System.currentTimeMillis());
|
|
|
+ CacheConstants.ACTIVE_USER_MAP.put(username,activeUserDto);
|
|
|
+ CacheConstants.KICKED_USER_MAP.put(username,request);
|
|
|
String obj = JSONUtil.toJsonStr(ResponseVO.success(token));
|
|
|
// token加密处理
|
|
|
String encrypt = SM2CryptUtils.encrypt(obj, SecretKeyConstants.CLIENT_PUBLIC_KEY);
|