|
|
|
@ -0,0 +1,35 @@
|
|
|
|
|
package com.manage.service;
|
|
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @author 谢铭
|
|
|
|
|
* @date 2021/9/22
|
|
|
|
|
* 校验是否同一ip、同一浏览器下多用户登陆,并且移除符合条件的session
|
|
|
|
|
* hashmap全局存储用户,利用hashmap去重保持同一浏览器同一ip,只有一个session信息被保存
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
@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();
|
|
|
|
|
}
|
|
|
|
|
//放入新的key,value,正常登陆
|
|
|
|
|
userIdMap.put(key, session);
|
|
|
|
|
}
|
|
|
|
|
}
|