|
|
|
@ -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<String, HttpSession> 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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|