在很多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。下面是**:
? 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
*
* @classname: loginlistenner
* @description: 登入監聽類-處理同一時間只允許賬號,單地點登入
* @author mr_smile2014 [email protected]
* @date 2023年11月12日 下午2:23:41
* 當向session中移除資料觸發
登入方法
對賬號、密碼、驗證碼進行判斷和驗證,驗證通過後把對應的使用者物件放入到session中,**如下:
? 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 登入
*
* @param username
* @param password
* @param code
* 驗證碼
* @param type
* 登陸型別(商戶,操作員)
web.xml配置把loginlistenner監聽類,配置到web.xml檔案中,這樣對session的監聽才生效。配置如下:
? 1
2
3
4
com.test.listenner.loginlistenner
單點登入實現多地同一賬號踢出功能
單點登入,踢出實現,一碰到,感覺矇圈了。一哥們跟我講,如果同乙個賬號,在乙個地方登入之後,怎麼保證有其他地方登入就踢出這個的登入。一問之後,我的第一反映就是我們可以使用使用者id來進行控制啊,但反應過來才發現不是每乙個公司都會為使用者表建立使用者id的。所以然後那哥們給我提示了一下,他說用ip啊,瞬...
同乙個伺服器實現單點登入
一.單點登入的前提條件 要想實現此功能要有一組加密與驗證加密的金鑰.修改節點下的節點屬性,如下 code 1.validationkey為用於驗證加密資料的金鑰.最小長度為40個字元 20位元組 最大長度為128個字元 64位元組 2.decryptionkey為用於加密資料的金鑰.最小長度為16字...
同乙個伺服器實現單點登入
一.單點登入的前提條件 要想實現此功能要有一組加密與驗證加密的金鑰.修改節點下的節點屬性,如下 code machinekey validationkey 6e993a81cf4bdca1c1031528f55dadbb8af1772a validation sha1 decryptionkey 2...