注销之前的session,修复之前的bug,触发条件:同一浏览器打登录页

master
xm 4 years ago
parent 5b63e8cd40
commit 50bb0eec92

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

@ -8,28 +8,17 @@ import java.util.HashMap;
/**
* @author
* @date 2021/9/23
* ipsession
* hashmaphashmapipsession
* @date 2021/9/29
* session,bug
*
*/
@Service
public class LoginService {
private static HashMap<String, HttpSession> userIdMap = new HashMap<>();
public void checkOnlyOneUser(HttpServletRequest request) {
//keyip+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();
}
//放入新的keyvalue正常登陆
userIdMap.put(key, session);
}
}
}
Loading…
Cancel
Save