1. 程式人生 > >怎麼保證web網站的單點登入

怎麼保證web網站的單點登入

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

首先我把思路分析一下:

1、使用者登入成功以後,將此sessionid儲存到ServletContext,在ServletContext中KEY值使用使用者名稱,VALUE值使用當前的sessionid。

2、登入以後使用者每次請求時,在攔截器中首先判斷session是否過期,如果沒有過期判斷ServletContext中的sessionid是否是當前的sessionid,如果不是,說明該賬號在其他地方登入。

一、使用者登入以後將使用者資訊customerInfo放入SESSION中

    request.getSession(true).setAttribute("customerInfo", customerInfo);

二、將登入成功客戶的SESSIONID儲存到上下文ServletContext中

因為上下文ServletContext是整個web專案共享的物件,所以每個請求都一個

    String sessionId = session.getId();
    ServletContext servletContext = request.getServletContext();
    servletContext.setAttribute(loginName, sessionId);

三、在攔截器中判斷session是否過期,ServletContext的sessionid是否已經被別人更新

        CustomerInfoDto customerInfo = (CustomerInfoDto) session.getAttribute("customerInfo");
        if(customerInfo == null) {
            StringBuffer json = new StringBuffer();
            String requestType =(String) request.getHeader("X-Requested-With");
            if (requestType != null && requestType.equals("XMLHttpRequest")) {
                response.setContentType("application/json;charset=UTF-8");
                json.append("{\"resultCode\":\"1\",\"resultMsg\":\"長時間未操作,請重新登入\"}");                
                PrintWriter pw = response.getWriter();   
                pw.print(json.toString());
                pw.close();
            }else{                
                response.sendRedirect(request.getContextPath() + "/login");
            }
            return false;
        }else{
            ServletContext servletContext = request.getServletContext();
            String loginSessionID = (String) servletContext.getAttribute(customerInfo.getLoginName());
            if(session.getId().equals(loginSessionID)){
                return true;
            }else{
                String requestType =(String) request.getHeader("X-Requested-With");
                if (requestType != null && requestType.equals("XMLHttpRequest")) {
                    response.setContentType("application/json;charset=UTF-8");            
                    PrintWriter pw = response.getWriter();   
                    pw.print("{\"resultCode\":\"1\",\"resultMsg\":\"該賬號已在其它地方登入!\"}");
                    pw.close();
                }else{
                    response.sendRedirect(request.getContextPath() + "/login?error=1");
                }
            }
        }

這裡有三個知識點需要注意:

1、攔截器在web.xml中的配置?

2、session的獲取和存值方式?

3、ServletContext的獲取和存值方式?

相關推薦

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

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

web api 登入(SSO) 許可權驗證

分站程式碼: using System;using System.Collections.Generic;using System.Linq;using System.Text.RegularExpressions;using System.Web;using System.Web.Mvc;usin

web sso 登入簡單例項原始碼

首先,單點登入主要目的為多個系統共用同一個身份驗證系統,即:使用者登入A系統,也可以訪問共用同一驗證系統的B系統。 廢話不多說,看例項: 採用三個web專案,實現單點登入。 專案一:SSOAuth servlet類:AuthServlet package org.s

怎麼保證web網站登入

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

Java Web網站應用中的登入

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

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

最簡單的web登入(SSO)

Fay Sso (單點登入如此的簡單,本示例支援IE9+,IE8也可以實現) 執行示例程式碼需要安裝node.js環境 Test 讓我們直接先來測試這個例子,然後看下我實現的想法,你會發現它是如此的簡單!

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

上次在《JSON Web Token - 在Web應用間安全地傳遞資訊》中我提到了JSON Web Token可以用來設計單點登入系統。我嘗試用八幅漫畫先讓大家理解如何設計正常的使用者認證系統,然後再延伸到單點登入系統。 使用者認證八步走 所謂使用者認證(Authenti

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

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

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

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

SSO登入,簡單模擬

SSO單點登入(以下全是個人理解,如果有誤,共同批評進步) 1.什麼是單點登入: 在不同的應用中,受保護的同一使用者,登入一次就可以訪問相關的其他系統應用。比如搜狐登入後,可以直接訪問部落格、郵箱等等,而不用再重新登入部落格系統、郵箱系統等等。方便了使用者的操作。 2.同域下單點登入

CAS 實現 SSO 登入

環境   cas-server-4.1.8,cas-client-3.4.0,Java-8,Maven-3,Tomcat-7.0.72   CAS Server 安裝   點此進入 CAS 下載列表,選擇下載 cas-4.1.

20登入

  傳統登入問題: 之前實現的登入和註冊是在同一個tomcat內部完成。我們現在的系統架構是每一個系統都是由一個團隊進行維護,每個系統都是單獨部署執行一個單獨的tomcat,所以,不能將使用者的登入資訊儲存到session中(多個tomcat的session是不能共享的),所以我們

登入(SSO)的自己看資料的一點理解

主要是學習了這篇微博:https://www.cnblogs.com/EzrealLiu/p/5559255.html 這篇文章在方案3和方案4中講解的個人有點不理解,加了一點自己的理解 原文 1.U第一次訪問W,W驗證失敗,跳轉至SSO要求U進行登入驗證; 登入並使各不同Do

windows系統下部署登入系統

windows系統單點登入 1:在 D:\software\java\learning\sso\keys 目錄下生成 keystore keytool -genkey -alias mykey -keyalg RSA -keystore D:\software\java\learn

初探系列 — Pharbers用於登入的許可權架構

一. 前言 就職公司 法伯科技是一家以資料科技為驅動, 專注於醫藥健康領域的循證諮詢公司. 以資料科學家身份, 賦能醫藥行業. 讓每位客戶都能享受資料帶來的價值, 洞察業務, 不止於資料, 讓決策更精彩。 法伯擁有多套自主研發的資料分析工具, 為企業帶來高效, 便捷, 實用的解決方案. MAX

SpringBoot+MyBatis+Redis實現SSO登入系統(二)

SpringBoot+MyBatis+Redis實現SSO單點登入系統(二)   三、程式碼 配置檔案配置資料庫,redis等相關的資訊。 # See http://docs.spring.io/spring-boot/docs/current/reference/html

SpringBoot+MyBatis+Redis實現SSO登入系統(一)

SpringBoot+MyBatis+Redis實現SSO單點登入系統(一)   一、SSO系統概述        SSO英文全稱Single Sign On,單點登入。SSO是在多個應用系統中,使用者只需要

PCB CS架構(工程系統)實現登入方法

社會的不斷進步發展,分工也越來越細了.而我們工作接觸的範圍也越來越狹小了,但這不是倒退了,而是分工之細讓人們在各個方面深耕細作。PCB企業軟體系統發展路線同樣也如此,隨著我們PCB企業發展不斷壯大,軟體系統也在不斷細分。目的只有一個,讓專業的事情交給專業的系統去做。回想當初起公司用必有德ERP,一個ERP能搞