这里有新鲜出炉的 JSP 教程,程序狗速度看过来!
JSP 全名为 Java Server Pages - java 服务器页面是由 Sun Microsystems 公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP 技术有点类似 ASP 技术,它是在传统的网页 html(标准通用标记语言的子集)文件 (*.htm,*.html) 中插入 Java 程序段 (Scriptlet) 和 JSP 标记(tag),从而形成 JSP 文件,后缀名为(*.jsp)。
这篇文章主要介绍了 JSP 开发中在 spring mvc 项目中实现登录账号单浏览器登录的相关资料, 需要的朋友可以参考下
JSP 开发中在 spring mvc 项目中实现登录账号单浏览器登录
在很多 web 产品中都需要实现在同一时刻,只能允许一个账号同时只能在一个浏览器当中登录。通俗点讲就是当 A 账号在
浏览器 1 当中登录了,此时在浏览器 2 中登录 A 账号。那么在浏览器 1 中的 A 账号将会被挤出去,当用户操作浏览器 1 的页面,页面会
跳到登录页面,需要重新登录。那么我们怎么实现这样的功能呢?下面将给大家进行详细的介绍:
原理
用户 A 使用账号 a 在浏览器当中登录,然后用户 B 在另外一台电脑上的浏览器登录账号 a, 当用户 B 登录验证成功时,将会触
发登录监听类,在监听类当中判断出账号 a 已经被用户 A 登录,就把用户 A 的账号 a 踢出去,此时当用户 A 操作页面,页面就会跳转到登录页面。
代码实现
在实现过程中,用到 LoginListenner 监听类、login 登录方法以及在 web.xml 中配置监听类
LoginListenner
当登录成功后,向 session 中放入登录成功的账号对象 loginuser, 触发 LoginListenner 中的 attributeAdded 事件,在这个事件中,
我们判断存放账号和 session 对应关系的 map 中是否有当前登录的账号的 session,如果有我们就把该 session 从 map 中移除,同时注销该 session,然后把刚登录的账号和 session 放入 map。
下面是代码:
- /**
- *
- * @ClassName: LoginListenner
- * @Description: 登录监听类-处理同一时间只允许账号,单地点登录
- * @author mr_smile2014 605051929@qq.com
- * @date 2014年11月12日 下午2:23:41
- *
- */
- public class LoginListenner implements HttpSessionAttributeListener {
- /**
- * 用于存放账号和session对应关系的map
- */
- private Map < String,
- HttpSession > map = new HashMap < String,
- HttpSession > ();
- /**
- * 当向session中放入数据触发
- */
- public void attributeAdded(HttpSessionBindingEvent event) {
- String name = event.getName();
- if (name.equals("loginuser")) {
- User user = (User) event.getValue();
- if (map.get(user.getUserName()) != null) {
- HttpSession session = map.get(user.getUserName());
- session.removeAttribute(user.getUserName());
- session.invalidate();
- }
- map.put(user.getUserName(), event.getSession());
- }
- }
- /**
- * 当向session中移除数据触发
- */
- public void attributeRemoved(HttpSessionBindingEvent event) {
- String name = event.getName();
- if (name.equals("loginuser")) {
- User user = (User) event.getValue();
- map.remove(user.getUserName());
- }
- }
- public void attributeReplaced(HttpSessionBindingEvent event) {
- }
- public Map < String,
- HttpSession > getMap() {
- return map;
- }
- public void setMap(Map < String, HttpSession > map) {
- this.map = map;
- }
- }
登录方法
对账号、密码、验证码进行判断和验证,验证通过后把对应的用户对象放入到 session 中,代码如下:
- /**
- * 登录
- *
- * @param userName
- * @param passWord
- * @param code
- * 验证码
- * @param type
- * 登陆类型(商户,操作员)
- * @param model
- * @return
- */
- @RequestMapping("/login")
- public String login(String account, String passWord, String code,
- Model model, HttpServletRequest request) {
- //登录验证并返回登录成功用户对象
- User user=loginResult(userPhone, passWord, code, request);
- //把用户对象放入到session中,将会触发LoginListenner中的attributeAdded事件
- request.getSession().setAttribute("loginuser", user);
- }
web.xml 配置
把 LoginListenner 监听类,配置到 web.xml 文件中,这样对 session 的监听才生效。配置如下:
- <!--一个用户只能在一个主机登录 -->
- <listener>
- <listener-class>com.test.listenner.LoginListenner</listener-class>
- </listener>
来源: http://www.phperz.com/article/17/0811/338943.html