事件監聽器--監聽同一個用戶重複登陸

事件監聽器

一;監聽同一個用戶重複登陸

   下面以一個用戶登陸列;來講解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>
 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章