用户不重复登录,后一用户登录将前一登录的用户挤下线
来源:互联网 发布:淘宝美工入门教程 编辑:程序博客网 时间:2024/05/18 03:27
1:数据库添加登录字段,来验证
2:通过session来验证
下面是方案2的具体实现思路:
登录时候校检..将登录id(userId)和sessionId通过map的形式保存起来
可以创建拦截器或过滤器
操作时候,校检userId和sessionId若相同则放之,若不同则提示登录失效或您的账号已在其它地点登录登出
主要代码如下
public class SingleLoginFilter implements Filter {
private static final Log log = LogFactory.getLog(SingleLoginFilter.class);
public static Map<String, String> optionMap = new HashMap<String, String>();
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
HttpSession session = ((HttpServletRequest)request).getSession();
Object sUser = session.getAttribute("user");
if (sUser==null) {//用户为空不拦截
filterChain.doFilter(request, response);
return;
}
JSONObject jUser = (JSONObject)sUser;
String userId = jUser.getString("userId");
//查看session中是否存在user的登录信息
String sessionId = getRequestSessionId((HttpServletRequest)request);
if(sessionId!=null&&sessionId.equals(optionMap.get(userId))) {
filterChain.doFilter(request, response);
} else {
//页面提示登录失效或您的账号已在其它地点登录
log.info("用户账号 "+userId+" 被强制挤下线,sessionId为:"+sessionId);
((HttpServletResponse) response).setHeader("content-type", "text/html;charset=UTF-8");
// response.getWriter().write("{\"status\":10000,\"message\":\"您的账号已失效,或在其它地点登录\"}");
session.removeAttribute("user");
response.getWriter().write("<script>alert('您的账号已在其它地点登录');window.location.href='login.html'</script>");
}
}
public static String getRequestSessionId(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if(cookie.getName()!=null&&cookie.getName().startsWith("JSESSIONID")) {
return cookie.getValue();
}
}
return null;
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
用户登录之后进行此操作:
SingleLoginFilter.optionMap.put(loginId, SingleLoginFilter.getRequestSessionId(((HttpServletRequest)request)));
((HttpServletRequest)request).getSession().setAttribute("user", dbuser);
- 用户不重复登录,后一用户登录将前一登录的用户挤下线
- Linux登录系统后了解用户、用户组、登录的终端以及root用户强制指定终端用户下线的小结
- 限制用户重复登录
- 防止用户重复登录
- 防止用户重复登录
- 用户重复登录
- 防止用户重复登录
- 防止用户重复登录
- 用户登录之后实现强制下线的功能
- struts做的记录当前在线用户,不可重复登录,并且可对在线用户进行强制下线
- Asp.net项目同一个用户后登录把前面登录的踢下线的两种实现方法
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 安装完mariadb,root用户用密码or不用密码都能登录
- 单例模式的三种实现及区别
- 每日一坑 pyinstaller 将.py生成.exe 报错 “IndexError: tuple index out of range”
- SLAM知名教授
- PHP函数参数传递
- 用户不重复登录,后一用户登录将前一登录的用户挤下线
- C/C++指向二维数组的指针
- 接触 PL/SQL 第三天
- Mysql事务隔离级别与锁
- 算法提高 c++_ch02_04
- JAVA字符集
- 关于函数中栈内存的分配问题追踪
- JAVA设计模式之单例模式[转]
- isset()和empty()的区别