解决单点登录的一个方法!

来源:互联网 发布:用java判断质数 编辑:程序博客网 时间:2024/05/22 06:33
这个只需要session和application就好了,
用户登录时,这样写:

User user = dao.login(userName, password);// 数据库中判断用户名和密码
if (null != user) {// 表示用户存在
  session.setAttribute("user", user);// 把用户放进session中
  application.setAttribute(userName, session.getId());/* 把用户所在的sessionId放进application中,首先要明白一点,一个session对应一个浏览器,其次要注意一点,userName必须是唯一的*/
}



当用户访问到其他url的时候,可以在过滤器或你的拦截器中这样写:

User user = (User) session.getAttribute("user");// 从session中取出用户
if (null == user) {// 未登录或者登录已经过期
  response.sendRedirect(request.getContextPath());// 跳转到首页或登录页面
}
String sessionId = (String) application.getAttribute(user.getUserName());
if (null == sessionId || !sessionId.equals(session.getId())) {/*这说明用户已经在其他电脑或其它浏览器登录了,那么之前登录的session就无效了,自动被后面的登录给踢掉*/  
  response.sendRedirect(request.getContextPath());// 跳转到首页或登录页面
}
chain.doFilter(request, response);// 通过验证,放行用户进入目标url


这种方式是我的一个前辈想到的,我们公司的所有项目都采纳了这种方式,
确保一个账号只能在一个浏览器中使用