濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > JSP開發(fā)中在spring mvc項(xiàng)目中實(shí)現(xiàn)登錄賬號(hào)單瀏覽器登錄

JSP開發(fā)中在spring mvc項(xiàng)目中實(shí)現(xiàn)登錄賬號(hào)單瀏覽器登錄

熱門標(biāo)簽:百度地圖添加標(biāo)注圖標(biāo)樣式 聊城智能電銷機(jī)器人外呼 泰州泰興400電話 怎么申請(qǐng) 南京新思維電話機(jī)器人 企業(yè)怎么在聯(lián)通申請(qǐng)400電話 好操作的電話機(jī)器人廠家 如何用中國地圖標(biāo)注數(shù)字點(diǎn) 地圖標(biāo)注市場怎么樣 南昌市地圖標(biāo)注app

JSP開發(fā)中在spring mvc項(xiàng)目中實(shí)現(xiàn)登錄賬號(hào)單瀏覽器登錄

在很多web產(chǎn)品中都需要實(shí)現(xiàn)在同一時(shí)刻,只能允許一個(gè)賬號(hào)同時(shí)只能在一個(gè)瀏覽器當(dāng)中登錄。通俗點(diǎn)講就是當(dāng)A賬號(hào)在
瀏覽器1當(dāng)中登錄了,此時(shí)在瀏覽器2中登錄A賬號(hào)。那么在瀏覽器1中的A賬號(hào)將會(huì)被擠出去,當(dāng)用戶操作瀏覽器1的頁面,頁面會(huì)

跳到登錄頁面,需要重新登錄。那么我們?cè)趺磳?shí)現(xiàn)這樣的功能呢?下面將給大家進(jìn)行詳細(xì)的介紹:

原理

用戶A使用賬號(hào)a在瀏覽器當(dāng)中登錄,然后用戶B在另外一臺(tái)電腦上的瀏覽器登錄賬號(hào)a,當(dāng)用戶B登錄驗(yàn)證成功時(shí),將會(huì)觸
發(fā)登錄監(jiān)聽類,在監(jiān)聽類當(dāng)中判斷出賬號(hào)a已經(jīng)被用戶A登錄,就把用戶A的賬號(hào)a 踢出去,此時(shí)當(dāng)用戶A操作頁面,頁面就會(huì)跳轉(zhuǎn)到登錄頁面。

代碼實(shí)現(xiàn)

在實(shí)現(xiàn)過程中,用到LoginListenner監(jiān)聽類、login登錄方法以及在web.xml中配置監(jiān)聽類

LoginListenner

當(dāng)?shù)卿洺晒螅騭ession中放入登錄成功的賬號(hào)對(duì)象loginuser,觸發(fā)LoginListenner中的attributeAdded事件,在這個(gè)事件中,
我們判斷存放賬號(hào)和session對(duì)應(yīng)關(guān)系的map中是否有當(dāng)前登錄的賬號(hào)的session,如果有我們就把該session從map中移除,同時(shí)注銷該session,然后把剛登錄的賬號(hào)和session放入map。

下面是代碼:

/** 
 * 
 * @ClassName: LoginListenner 
 * @Description: 登錄監(jiān)聽類-處理同一時(shí)間只允許賬號(hào),單地點(diǎn)登錄 
 * @author mr_smile2014 605051929@qq.com 
 * @date 2014年11月12日 下午2:23:41 
 * 
 */ 
public class LoginListenner implements HttpSessionAttributeListener { 
  /** 
   * 用于存放賬號(hào)和session對(duì)應(yīng)關(guān)系的map 
   */ 
  private MapString, HttpSession> map = new HashMapString, HttpSession>(); 
 
  /** 
   * 當(dāng)向session中放入數(shù)據(jù)觸發(fā) 
   */ 
  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()); 
    } 
 
  } 
  /** 
   * 當(dāng)向session中移除數(shù)據(jù)觸發(fā) 
   */ 
  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 MapString, HttpSession> getMap() { 
    return map; 
  } 
 
  public void setMap(MapString, HttpSession> map) { 
    this.map = map; 
  } 
 
} 

登錄方法

對(duì)賬號(hào)、密碼、驗(yàn)證碼進(jìn)行判斷和驗(yàn)證,驗(yàn)證通過后把對(duì)應(yīng)的用戶對(duì)象放入到session中,代碼如下:

/** 
   * 登錄 
   * 
   * @param userName 
   * @param passWord 
   * @param code 
   *      驗(yàn)證碼 
   * @param type 
   *      登陸類型(商戶,操作員) 
   * @param model 
   * @return 
   */ 
  @RequestMapping("/login") 
  public String login(String account, String passWord, String code, 
      Model model, HttpServletRequest request) { 
      //登錄驗(yàn)證并返回登錄成功用戶對(duì)象 
      User user=loginResult(userPhone, passWord, code, request); 
      //把用戶對(duì)象放入到session中,將會(huì)觸發(fā)LoginListenner中的attributeAdded事件 
      request.getSession().setAttribute("loginuser", user); 
       
      } 

web.xml配置

把LoginListenner監(jiān)聽類,配置到web.xml文件中,這樣對(duì)session的監(jiān)聽才生效。配置如下:

!--一個(gè)用戶只能在一個(gè)主機(jī)登錄 --> 
  listener> 
    listener-class>com.test.listenner.LoginListenner/listener-class> 
  /listener> 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

您可能感興趣的文章:
  • JSP使用MVC模式完成刪除和修改功能實(shí)例詳解
  • JSP使用Servlet作為控制器實(shí)現(xiàn)MVC模式實(shí)例詳解
  • springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁面
  • springMVC如何將controller中Model數(shù)據(jù)傳遞到j(luò)sp頁面
  • SpringMVC 向jsp頁面?zhèn)鬟f數(shù)據(jù)庫讀取到的值方法
  • 淺談SpringMVC jsp前臺(tái)獲取參數(shù)的方式 EL表達(dá)式
  • JSP中springmvc配置validator的注意事項(xiàng)
  • JavaWeb實(shí)現(xiàn)用戶登錄注冊(cè)功能實(shí)例代碼(基于Servlet+JSP+JavaBean模式)
  • jsp 實(shí)現(xiàn)的簡易mvc模式示例

標(biāo)簽:白銀 自貢 山南 臨汾 吉林 烏蘭察布 開封 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《JSP開發(fā)中在spring mvc項(xiàng)目中實(shí)現(xiàn)登錄賬號(hào)單瀏覽器登錄》,本文關(guān)鍵詞  JSP,開發(fā),中,在,spring,mvc,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《JSP開發(fā)中在spring mvc項(xiàng)目中實(shí)現(xiàn)登錄賬號(hào)單瀏覽器登錄》相關(guān)的同類信息!
  • 本頁收集關(guān)于JSP開發(fā)中在spring mvc項(xiàng)目中實(shí)現(xiàn)登錄賬號(hào)單瀏覽器登錄的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    石台县| 衢州市| 昌平区| 武城县| 米易县| 汨罗市| 汝城县| 深州市| 平乐县| 苏尼特左旗| 武邑县| 荔波县| 忻州市| 韶关市| 青海省| 盐城市| 洪雅县| 宾川县| 莱州市| 德安县| 崇州市| 丹东市| 新巴尔虎左旗| 马龙县| 边坝县| 彭阳县| 宜宾县| 东明县| 香河县| 轮台县| 河池市| 嘉兴市| 区。| 崇仁县| 庄浪县| 璧山县| 延长县| 桦南县| 兴文县| 惠东县| 锦屏县|