`
9708989
  • 浏览: 50509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

事件监听器--监听同一个用户重复登陆

    博客分类:
  • java
阅读更多

事件监听器

一;监听同一个用户重复登陆

   下面以一个用户登陆列;来讲解sessiong监听器的原理和用法

1,  创建一个容器来封装登陆用户的信息,代码如下:

package org.luojs.lister;

import java.util.ArrayList;

import java.util.List;

import com.luojs.struts.form.UserForm;

public class ListLister {   

    private static List list = new ArrayList();   

    public ListLister(){       

         super();

    }  

    public List getList(){

        return list;

    }

    public void addList(UserForm user){

        this.list.add(user);

    }

    public void remove(int n){

        list.remove(n);

    }

    /**

     * 判断新来的用户是否也存在,如果存在,返回ture

     * @param user

     * @return true;

     */

    public boolean isExec(UserForm user){      

        boolean flag = false;

        for (int i = 0; i < list.size(); i++) {

            UserForm userForm = (UserForm)list.get(i);

            if(userForm.getUsername().equals(user.getUsername())){

                flag = true;

                break;

            }

        }      

        return flag;

    }

}

 
 

 

 

 

2,  监听器需要实现一个接口(implements HttpSessionAttributeListener),

package org.luojs.lister;

 

import javax.servlet.http.HttpSessionAttributeListener;

import javax.servlet.http.HttpSessionBindingEvent;

 

import com.luojs.struts.form.UserForm;

 

public class SessionLister implements HttpSessionAttributeListener{

   

        /* 创建一个 ListLister 来封装登陆的用户对象 */

        private static ListLister list = new ListLister();

        /**

         *  实现attributeAdded 方法,当用户向session 中添加用户对象时,触法次方法

         *  这个方法将把该用户的信息保存到 ListLister 中

         */

       public void attributeAdded(HttpSessionBindingEvent arg0) {

           System.out.println("wcome you ! add ");

           if(arg0.getName().equals("username")){

              System.out.println("wcome you ! add sssssssssssssss");

              UserForm answer = (UserForm)arg0.getValue();

              list.addList(answer);

           }         

       }

        /**

         * 当有用户登陆来时,判断他是否已存在,如果存在,让他出去

         */

       public void attributeRemoved(HttpSessionBindingEvent arg0) {

           System.out.println("wcome come your removed ");

             int n=0;

             UserForm p1 = (UserForm)arg0.getValue();

              for(int i=0;i<list.getList().size();i++){

              UserForm p2 = (UserForm)list.getList().get(i);

              if(p1.getUsername().equals(p2.getUsername())){

                   n=i;

                   break;

              }

              }

              list.getList().remove(n);

       }

       public void attributeReplaced(HttpSessionBindingEvent arg0) {

       }     

}
 

 

3, 处理用户提交时的代码:(这是在Struts 中的验证)

public ActionForward longin(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response) {

       UserForm userForm = (UserForm) form;// TODO Auto-generated method stub

       boolean flag = false;

       ListLister listuser = new ListLister();

       HttpSession session = request.getSession();

       String user = userForm.getUsername();

       String pass = userForm.getPassword();

       flag = userbiz.selectByName(user, pass);

       if (flag) {

           if (!listuser.isExec(userForm)) {

              session.setAttribute("username", userForm);

              return mapping.findForward("indexto");// 如果登陆成功,把权限转交给JobsAction

           } else  {

              error = "<h3><li>Sorry! 此用户也存在,不能重复登陆 !</h3>";

           }

       } else {

           error = "<h3><li> sorry ! this is your userName or passwrod error !</h3>";

       }

       request.setAttribute("error", error);

       return mapping.findForward("backToIndex");// 回到登陆页

    }
 

3,  在web.xml中注册监听器;

<listener>   <listener-class>org.luojs.lister.SessionLister</listener-class>

    </listener>
 

 

 

分享到:
评论

相关推荐

    .net C# 通过session控制重复登录及在线用户统计

    当用户成功登录后,通常会将用户的一些关键信息(如ID、用户名等)存储到`Session`中,创建一个与用户会话相关的唯一标识。每当用户尝试再次登录时,系统首先检查`Session`中是否存在当前用户的标识。如果存在,...

    防止重复登陆课程案例源代码

    在LoginListenerWeb这个压缩包中,我们可以推测它包含了一个监听用户登录事件的Web应用程序组件。可能有以下几个关键部分: 1. **登录监听器(LoginListener)**:这是一个关键组件,它负责监听用户的登录行为。当...

    C#两个账号同时登录,后登录的账号将前一个账号挤掉

    2. **全局会话监听器**:为了实时检测多个会话,可以创建一个全局的Session监听器。在C#中,可以通过实现`HttpSessionStateModule.SessionStart`和`HttpSessionStateModule.SessionEnd`事件来监听会话的开始和结束。...

    防止一个用户登录多次的方法

    ### 防止一个用户登录多次的方法 在Web开发领域,有时我们需要确保用户在同一时间内只能登录一次系统。这种设计逻辑可以有效地避免同一账户被不同设备同时登录所导致的安全隐患及用户体验下降的问题。本文将详细...

    Java Web开发防止多用户重复登录的完美解决方案

    在Java Web开发中,防止多用户重复登录是一个重要的安全措施,确保每个账号只能在一个设备或浏览器会话中活跃。常见的解决方法有两种,本文主要探讨第二种方案。 首先,第一种解决方案是通过在数据库中添加一个标志...

    orcle 用户说明

    - `scott`用户是一个示例用户,通常用于演示和学习目的。 2. **创建新用户**: - 可以使用SQL命令`CREATE USER`来创建新的数据库用户。 - 创建用户时,需要指定用户名、口令以及分配的空间配额等信息。 - 示例...

    Vue实验一源代码:登陆界面

    - `v-on`指令用于绑定DOM事件监听器。在登录界面,我们可能需要监听提交按钮的点击事件,执行登录逻辑。 4. **计算属性与方法**: - 计算属性用于基于其他数据属性动态计算出新值。例如,我们可能需要验证用户名...

    UniGUI集合说明--追月无名.pdf

    怎样给每一个在线用户建立一套变量,在用户断开后立即清除 为每个在线用户建立变量并在断开连接时清除的方法: - **使用Session**:利用Session机制为每个用户提供独立的数据存储空间。 - **监听Session**:监听...

    QQ多帐号登陆器-易语言

    QQ多帐号登陆器是一款基于易语言开发的工具,主要用于方便用户同时登录多个QQ账号,无需反复切换或打开多个QQ客户端。这款软件的核心功能是通过编程技术实现对QQ登录过程的自动化,让用户在一台电脑上可以高效地管理...

    angularjs邮箱登陆特效

    【AngularJS邮箱登录特效】是基于AngularJS框架构建的一个用户管理界面,展示了如何利用AngularJS进行数据绑定、事件处理和表单验证等核心功能。在这个示例中,我们可以看到以下几个关键知识点: 1. **AngularJS...

    struts2+spring+ibatis+jquery ajax的登陆注册实时验证

    Struts2、Spring、iBatis和jQuery AJAX是Java Web开发中的四大核心技术,它们共同构建了一个功能强大的MVC(模型-视图-控制器)架构。本文将深入探讨这些技术在登录注册系统中的应用。 首先,Struts2是Apache基金会...

    ajax无刷新加载登陆注册

    通过以上步骤,我们可以实现一个高效的Ajax无刷新加载登录注册界面,既保证了数据的安全性,又提升了用户交互的流畅度。在实际开发中,还可以结合现代前端框架如React、Vue等,进一步提高开发效率和应用性能。

    Spring Security 安全权限管理手册.pdf

    - 介绍如何通过监听器监控用户的会话状态。 - **8.2 添加过滤器** - 讨论如何添加自定义过滤器来管理会话。 - **8.3 控制策略** - **8.3.1 后登陆的将先登录的踢出系统** - 讲解如何配置会话策略,使得后来者的...

    JSP中的在线人数统计

    为了实现在线人数统计,我们首先需要创建一个监听器类`OnLineDemo.java`,该类实现了`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`接口。 1. **监听器类`OnLineDemo.java`**:...

    Android Studio仿微信登录、注册界面——线性布局.rar

    - 在Java代码中,我们需要为这些UI元素找到对应的引用,如`findViewById(R.id.username)`,并可能添加监听器来处理用户交互,如点击登录按钮后的验证逻辑。 - 对于登录,这可能涉及到网络请求以验证用户名和密码;...

    C#有效防止同一账号多次登录(附三种方法)

    在C#开发中,防止同一账号多次登录是一个重要的安全措施,可以有效避免恶意用户或未经授权的多设备同时访问。以下将详细介绍三种常见的方法: 1. 使用数据库记录用户登录状态: 这是最基础也是最常见的方式。当...

    Axure快速原型设计参考资料

    - **获取焦点与失去焦点**:这两个事件分别在元件获得和失去焦点时触发。 - **应用场景**:可用于实现光标聚焦时的提示信息显示或离开输入框时的数据校验。 - **3.3.5 变量(Variables)** - **变量存储**:...

    安卓 简单登录注册界面

    HashMap在Java中是容器类的一个实例,它允许我们通过键(Key)来查找和存储值(Value)。在登录注册场景下,键可能是用户名,而值可能是对应的密码或其他用户属性。HashMap的优势在于它的快速查找和插入性能,因为它...

    微信小程序登录全局状态401处理

    - **监听网络请求**:可以使用`wx.request`的拦截器功能,在每个请求之前检查用户是否已登录,如果登录状态存在且未过期,则添加必要的认证信息(如Session Key)到请求头。 - **错误捕获**:对于401错误,通常...

Global site tag (gtag.js) - Google Analytics