diff --git a/power-admin/src/main/java/com/manage/controller/LoginController.java b/power-admin/src/main/java/com/manage/controller/LoginController.java index 8ec86c7..23ea903 100644 --- a/power-admin/src/main/java/com/manage/controller/LoginController.java +++ b/power-admin/src/main/java/com/manage/controller/LoginController.java @@ -40,15 +40,18 @@ public class LoginController { LoginService loginService; @RequestMapping(value = "login",method = RequestMethod.GET) - public String toLogin(Model model){ + public String toLogin(Model model ,HttpServletRequest request){ CacheManager.addExcCount("noExc"); + //同一浏览器打开login,直接触发注销登录session + loginService.removeOldUserOnLogin(request); + return "loginDir/login"; } @RequestMapping(value = "login",method = RequestMethod.POST) public String login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model){ - //2021/9/23实际校验调用 - loginService.checkOnlyOneUser(request); + //同一浏览器打开login,直接触发注销登录session + loginService.removeOldUserOnLogin(request); try { Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser); diff --git a/power-admin/src/main/java/com/manage/service/LoginService.java b/power-admin/src/main/java/com/manage/service/LoginService.java index 859ebf0..689e303 100644 --- a/power-admin/src/main/java/com/manage/service/LoginService.java +++ b/power-admin/src/main/java/com/manage/service/LoginService.java @@ -8,28 +8,17 @@ import java.util.HashMap; /** * @author 谢铭 - * @date 2021/9/23 - * 校验是否同一ip、同一浏览器下多用户登陆,并且移除符合条件的session - * hashmap全局存储用户,利用hashmap去重保持同一浏览器同一ip,只有一个session信息被保存 + * @date 2021/9/29 + * 注销之前的session,修复之前的bug + * 触发条件:同一浏览器打开登录页 */ @Service public class LoginService { - private static HashMap userIdMap = new HashMap<>(); - - public void checkOnlyOneUser(HttpServletRequest request) { - //key,ip+ua共同构成单用户识别码 - String ip = request.getRemoteAddr(); - String ua = request.getHeader("user-agent"); - String key = ip + ua; - //value为session - HttpSession session = request.getSession(); - //判断是否存在key,存在就执行session过期的方法 - if (userIdMap.containsKey(key)) { - //非空就是保存过,就清理指定sessionId对应的session,处理完正常登录 - userIdMap.get(key).invalidate(); + public void removeOldUserOnLogin(HttpServletRequest request) { + if (null != request.getSession(false)&&!"".equals(request.getSession(false))) { + //直接注销之前session + request.getSession(false).invalidate(); } - //放入新的key,value,正常登陆 - userIdMap.put(key, session); } -} +} \ No newline at end of file