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

事件监听器

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

   下面以一个用户登陆列;来讲解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>
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值