1. 程式人生 > >Java Web網站應用中的單點登入

Java Web網站應用中的單點登入

採用SSH架構加以說明:
1.  建立一個登入管理類LoginManager
2.  在LoginManager中定義一個集合,管理登入的使用者。
3.  在Spring中將LoginManager配置成單例
4.  如果使用自定義的使用者管理類,則為了說明方便,將此類命名為UserContext(表示使用者授權的上下文)
5.  如果未使用自定義的使用者管理類,則直接使用Session。
6.  在登入授權物件中,檢查使用者是否是合法使用者,如果是合法使用者,則在LoginManager的集合中查詢使用者是否已經線上,如果不線上,則將使用者加入集合。
7.  處理策略一:如果使用者已經線上,則取新登入使用者的Session,將它失效,則能阻止新登入使用者登入。
8.  處理策略二:如果使用者已經線上,則取出線上使用者的Session,將它失效,再把新登入使用者加入LoginManager的集合。則先登入使用者不能執行有許可權的操作,只能重新登入。

程式碼片段:
1. applicationContext.xml
<bean id="loginManager" class="LoginManager" scope="singleton" />
<bean id="action" class="LoginAction" scopt="prototype" >
    <property name="laginManager" ref="loginManager" />
</bean>

2. LoginManager.java
Collection<Session> sessions;

public Session login(Session session) {
    for (Session s : sessions) {
        if (s 與 session 是同一使用者)
            策略一: return session
            策略二:{
                sessions.add(session); // 這兩行在迴圈中操作集合類會丟擲異常
                sessions.remove(s);    // 此處僅為簡單示範程式碼,實際程式碼中應該在迴圈外處理
                return s;
            }
    }
    sessions.add(session);

    return null;
}

3. LoginAction.java

LoginManager loginManager;

public String execute() throws Exception {
    取session
    檢查使用者名稱,密碼
    if (是合法使用者) {
        session = loginManager.login(session);
        if (null!=session) session.invalidate();
    }
}

4. 如果自定義了UserContext,則可將集合改成Collection<UserContext> users;

5. UserContext.java
Session session;
Session getSession() {
    return this.session;
}

boolean login(String userName, String password) {
    訪問資料庫,檢查使用者名稱密碼
    return 是否合法;
}

boolean sameUser(UserContext uc) {
    return uc.userName.equals(this.userName);
}

6. 修改LoginManager.java
Collection<UserContext> users;

public UserContext login(UserContext user) {
    for (UserContext uc : users) {
        if (uc.sameUser(user))
            策略一: return user
            策略二:{
            users.add(user);  // 這兩行在迴圈中操作集合類會丟擲異常
            users.remove(uc); // 此處僅為簡單示範程式碼,實際程式碼中應該在迴圈外處理
            return uc;
            }
    }
    users.add(user);

    return null;
}

7. 修改LoginAction.java
public String execute() throws Exception {
    取session // 也可以在UserContext內部取session。
    UserContext user = new UserContext();
    user.setSession(session);
    if (user.login(userName, password)) {
        UserContext uc = loginManager.login(user);
        if (null!=uc) uc.getSession().invalidate();
    }
}
===============================================================================================

相關推薦

Java Web網站應用登入

採用SSH架構加以說明: 1.  建立一個登入管理類LoginManager 2.  在LoginManager中定義一個集合,管理登入的使用者。 3.  在Spring中將LoginManager配置成單例 4.  如果使用自定義的使用者管理類,則為了說明方便,將此類命名為UserContext(表示使用

Java登入的實現——類似QQ“頂號”操作

簡介   對於目前的網路環境而言,在開發的系統中建立一個完善的賬號系統尤為重要。而其中的一個手段就是進行多點登入的限制。類似於騰訊qq應用軟體的機制,在其他裝置上登入自己賬號的時候,當前登入會被踢出。這樣就避免了一些自己本身的失誤或者一些惡意的賬號攻擊。

Java Redis + Cookie + Filter 實現登入

Java Redis + Cookie + Filter 實現單點登入 Java Redis + Cookie + Filter 實現單點登入 1 緣起 2 大體思路 3 擼起袖子幹 3

淺析C#登入的原理和使用

是單點登入? 我想肯定有一部分人“望文生義”的認為單點登入就是一個使用者只能在一處登入,其實這是錯誤的理解(我記得我第一次也是這麼理解的)。 單點登入指的是多個子系統只需要登入一個,其他系統不需要登入了(一個瀏覽器內)。一個子系統退出,其他子系統也全部是退出狀態。 如果你還是不明白,我們舉個實際的例子把。

springBoot+redis 實現session共享理解,應用場景登入,分散式應用

Springboot+redis 實現session共享也是利用了cookie在域名,路徑相同的情況下可以共享內容。第一次請求會將SESSION儲存在redis中,並將SESSIONID返回到瀏覽器的cookie中,第二次請求會攜帶上第一次請求的JSESSIONID。服務端拿

java使用CAS實現SSO登入

CAS-SERVER的預設驗證規則:只要使用者名稱和密碼相同就認證通過(僅僅用於測試,生成環境需要根據實際情況修改), 輸入admin/admin 點選登入,就可以看到登入成功的頁面Tomcat配置HTTPS 建立證書       這裡使用JDK生成的證書,正式環境需購買專業提供商的證書        用J

八幅漫畫理解使用JSON Web Token(JWT)設計登入系統

原文連結:   http://blog.leapoahead.com/2015/09/07/user-authentication-with-jwt/ 使用者認證八步走 所謂使用者認證(Authentication),就是讓使用者登入,並且在接下來的一段時間內讓使用者訪

Java移動端後臺之登入

1.需求分析     單點登入在軟體開發中是一個老生常談的話題;以筆者公司的後臺專案為例,筆者公司的app是以航母戰鬥群的形式開發的,一個後臺必須供四五個app訪問,甚至更多;並且分app中還集成了第三方,比如極光推送,融雲通訊;尤其對於極光推送來說,保持平臺的唯一性至關重

ASP.NET Core Authentication系列(四)基於Cookie實現多應用登入(SSO)

前言 === 本系列前三篇文章分別從ASP\.NET Core認證的三個重要概念,到如何實現最簡單的登入、登出和認證,再到如何配置Cookie 選項,來介紹如何使用ASP\.NET Core認證。感興趣的可以瞭解一下。 - [ASP.NET Core Authentication系列(一)理解Claim,

Java架構-Spring+ Spring cloud + SSO登入應用認證

之前的文章中有介紹spring cloud sso整合的方案,也做過spring + jwt + redis的解決方案,不同系統的無縫隙整合,統一的sso單點登入介面的管理、每個應用整合的許可權認證,白名單等都是我們需要考慮的,現在針對於以上的問題我們做了sso單點登入應用認證平臺,設計

Web應用跨域訪問及登入解決方案彙總

做過跨越多個網站的Ajax開發的朋友都知道,如果在A網站中,我們希望使用Ajax來獲得B網站中的特定內容,如果A網站與B網站不在同一個域中,那麼就出現了跨域訪問問題。Ajax的跨域訪問問題是現有的Ajax開發人員比較常遇到的問題。 IE對於跨域訪問的處理是,彈出警告框,提

Windows 下Maven+Tomcat 8 使用JAVA以及 Json Web Token 實現 登入demo

0.準備工作 如果你本地環境都OK,可以跳過。 1.簡介 json web token(JWT)是一種新的使用者認證方式,不同與以前的Session. JWT不需要伺服器端儲存使用者資訊,當用戶登入後,伺服器將使用者資訊放入加密放入t

java web 使用者登入的方案的基本實現

      在實驗室剛剛結束的專案中,有這樣一個需求,一個賬號同時只能在一個地方登入,如果在其他地方登入則提示已在別處登入,直到已登入賬號失效或退出,同時,同一瀏覽器同時只能登入一個使用者。       首先,考慮不能重複登入的問題。在專案中,我使用session來儲存使用

怎麼保證web網站登入

    我們的網站在管理使用者登入上一般都需要一個賬號只能有一個人登入,那怎麼才能實現呢?這裡我介紹一種我在專案中使用的方法。用ServletContext實現。 首先我把思路分析一下: 1、使用者登

javacookie的操作(通過cookie實現簡單的登入

package com.njupt.sso.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.h

java web開發一個帳號同一時間只能一個人登入登入

對於一個帳號在同一時間只能一個人登入,可以通過下面的方法實現: 1 .在使用者登入時,把使用者新增到一個ArrayList中 2 .再次登入時檢視ArrayList中有沒有該使用者,如果ArrayList中已經存在該使用者,則阻止其登入 3 .當用戶退出時,需要從該ArrayList中刪除該使用者,這又分為

java web項目redis集群或擊版配置詳解

redis集群 redis單機 jedis jedis客戶端集群 jedis客戶端單機 單機版配置 <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!--

身份認證系統(二)多WEB應用登錄

會有 求和 頂級域名 等等 票據 什麽 多個 另一個 如何解決 隨著互聯網的發展,web應用的復雜度也一直在提升,慢慢的單一的web應用已經不能滿足復雜的業務需求。例如百度的搜索、新聞、百科、貼吧,其實本質上都是不同的網站。當用戶使用這些平臺的時候,我們當然不希望用戶在每一

(9) tomcat實現同一虛擬機所有應用程序登錄SSO

所有應用 單點登錄 分享圖片 png 技術 應用 單點 登錄 技術分享 (9) tomcat中實現同一虛擬機中所有應用程序單點登錄SSO

Java Web開發 基於HttpServlet的使用者登入網站 例項

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!