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>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • JSP spring boot / cloud 使用filter防止XSS

    JSP spring boot / cloud 使用filter防止XSS 一.前言 XSS(跨站脚本攻击) 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. 二.思路 基于filter拦截,将特殊字符替换为html转意字符 (如

  • JSP 中spring事务配置详解

    JSP 中spring事务配置详解 前几天被问到,如何防止服务器宕机,造成的数据操作的不完全. 问了一下同事,是事务.哎,恍然大悟,迷糊一时了. 声明式的事务配置,这个是最推荐的,配置到service层. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context=&

  • java实现图片上加文字水印(SpringMVC + Jsp)

    看之前要先对SpringMVC进行了解打好基础,下面直接先看效果图 代码编写 1.导入相关架包 2.配置文件 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"

  • JSP 获取Spring 注入对象示例

    <%@ page import="org.springframework.web.context.support.WebApplicationContextUtils"%> <%@ page import="org.springframework.context.ApplicationContext"%> ServletContext sc = this.getServletConfig().getServletContext(); Appl

  • SpringBoot创建JSP登录页面功能实例代码

    添加JSP配置 1.pom.xml添加jsp解析引擎 <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.s

  • Spring boot 跳转到jsp页面的实现方法

    本人正在学习Spring boot,搜索了很多关于Spring boot 跳转到jsp页面的实现方法介绍,下面我来记录一下,有需要了解的朋友可参考.希望此文章对各位有所帮助. @Controller注解 1.application.properties文件中配置 # 配置jsp文件的位置,默认位置为:src/main/webapp spring.mvc.view.prefix=/pages/ # 配置jsp文件的后缀 spring.mvc.view.suffix=.jsp 2.Controlle

  • JSP 获取spring容器中bean的两种方法总结

    JSP 获取spring容器中bean的方法总结 方案1(Web中使用): ApplicationContext ct = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext()); logService = (ISysLogService) ct.getBean("sysLogServiceImpl"); 说明:getRequiredWeb

  • JSP开发中在spring mvc项目中实现登录账号单浏览器登录

    JSP开发中在spring mvc项目中实现登录账号单浏览器登录 在很多web产品中都需要实现在同一时刻,只能允许一个账号同时只能在一个浏览器当中登录.通俗点讲就是当A账号在 浏览器1当中登录了,此时在浏览器2中登录A账号.那么在浏览器1中的A账号将会被挤出去,当用户操作浏览器1的页面,页面会 跳到登录页面,需要重新登录.那么我们怎么实现这样的功能呢?下面将给大家进行详细的介绍: 原理 用户A使用账号a在浏览器当中登录,然后用户B在另外一台电脑上的浏览器登录账号a,当用户B登录验证成功时,将会触

  • spring mvc实现登录账号单浏览器登录

    在很多web产品中都需要实现在同一时刻,只能允许一个账号同时只能在一个浏览器当中登录.通俗点讲就是当A账号在浏览器1当中登录了,此时在浏览器2中登录A账号.那么在浏览器1中的A账号将会被挤出去,当用户操作浏览器1的页面,页面会跳到登录页面,需要重新登录.那么我们怎么实现这样的功能呢?下面将给大家进行详细的介绍: 原理 用户A使用账号a在浏览器当中登录,然后用户B在另外一台电脑上的浏览器登录账号a,当用户B登录验证成功时,将会触发登录监听类,在监听类当中判断出账号a已经被用户A登录,就把用户A的账

  • Spring MVC项目中的异常处理详解

    目录 前言 1. 基于配置的简单异常处理 2. 基于注解的全局异常处理 总结 前言 我们在项目的开发中,难免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大. 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的 功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的.下面将介绍Spring MVC是如何处理异常的. 1. 基于配置的简单异常处理 在SpringMVC中拥有一套非常强大的

  • Spring MVC项目中log4J和AOP使用详解

    前言 日志处理是每个项目当中一个非常重要的内容.没有了日志,也就失去了对系统的可控性.没有日志,系统出现任何问题,都会没有踪迹可寻,这对一个信息系统而言是非常危险的. 项目中需要将service中的类方法的调用过程,使用log4j日志记录. service中的类和方法都很多,不可能在每个类中单独添加log4j日志记录的功能,因此我们在这里使用AOP的思想进行横向切面. 以service类中的方法为切入点,通过AOP在方法调用前后使用log4j输出日志,内容包括正在调用的类和方法名. 在配置过程中

  • Spring MVC环境中文件上传功能的实现方法详解

    前言 我们在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像.商品图片.邮件附件等等.其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上传和下载有或多或少的封装,这里就以Spring MVC环境中文件的上传为例,讲解Spirng MVC环境下的文件上传功能实现.下面话不多说了,来一起看看详细的介绍吧. 一.客户端编程 由于多数文件上传都是通过表单形式提交给后台服务器的,因此,要实现文件上传功能,就需要提供一个文件上传的表单

  • Spring MVC项目开发踩过的一些bug

    Spring MVC项目创建,我踩过的bug 前言 最近在学spring MVC,做为一个初学者,踩了不少坑,导致项目各种出错 在这里向大家分享一下我的项目开发操作,开发springMVC项目步骤: 打开idea 我的项目运行环境 在idea2020版+jdk8+maven 选择create new project创建一个新的项目 idea2020版, 第二步 选择Maven工程,勾选create from archetype选择Maven骨架,选择webapp,注意是第二个webapp不要选错

  • Spring Boot项目中定制拦截器的方法详解

    这篇文章主要介绍了Spring Boot项目中定制拦截器的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Servlet 过滤器属于Servlet API,和Spring关系不大.除了使用过滤器包装web请求,Spring MVC还提供HandlerInterceptor(拦截器)工具.根据文档,HandlerInterceptor的功能跟过滤器类似,但拦截器提供更精细的控制能力:在request被响应之前.request被响应之后.视

  • Spring Boot项目中集成微信支付v3

    1. 前言 最近忙的一批,难得今天有喘气的机会就赶紧把最近在开发中的一些成果分享出来.前几日分享了自己写的一个微信支付V3的开发包payment-spring-boot-starter,就忙里偷闲完善了一波.期间给微信支付提交了6个BUG,跟微信支付的产品沟通了好几天. 项目地址: https://github.com/NotFound403/payment-spring-boot 别忘记给个Star啊. 那么都完善了哪些内容呢?胖哥来一一介绍. 2. Maven 中央仓库 是的,不用再自行编译

  • 使用Ajax更新ASP.Net MVC项目中的报表对象方法

    Ajax技术显著加快了Web应用程序的速度.另外,视觉效果方面也有提升.大家都同意,每次点击按钮时整个页面都会被刷新这一点不太友好.如果你的网速不是很快,那么这个过程会很烦人,因为所有的元素都会先消失,再慢慢重新出现.如果只刷新一部分页面,那就美滋滋了.而这正是Ajax所提供的.该脚本向服务器发送一个请求,以更新所需的部分信息.然后,脚本将更新的数据插入页面上的正确位置. 在这个页面中,我想用一个简单的方法通过Ajax更新ASP .Net MVC项目中的信息.这种方法被称为"unobtrusiv

  • Spring Boot 项目中使用Swagger2的示例

    本文介绍了Spring Boot 项目中使用Swagger2的示例,分享给大家,具体如下: 添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.2.2</version> </dependency&g

随机推荐