1. 程式人生 > >單點登入整合說明

單點登入整合說明

第一步:下載資源包

如果專案是maven專案可在pom檔案引入以下程式碼:

<!--整合cas需要的jar-->
<dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-core</artifactId>
    <version>3.3.3</version

>
</dependency>
<!--整合cas  END    -->

如果沒有使用mave,將lib目錄提供的jar拷貝到應用的\WEB-INF\lib目錄下。

cas-client-core-3.3.3.jar

第二步:修改應用配置檔案

修改應用的web.xml檔案,新增與SSO Server通訊的filter和listener,具體配置資訊如下: 

<!--用於實現單點登出功能 -->
<filter>
    <filter-name

>CAS Single Sign Out Filter</filter-name>
    <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>

<!-- 負責使用者的認證工作-->

<filter>
    <filter-name>CAS Authentication Filter</filter-name

>
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>http://47.92.125.222:8080/cas/login</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://47.92.125.222:8084</param-value>
    </init-param>
</filter>

 

<!-- 該過濾器負責對Ticket的校驗工作-->
<filter>
    <filter-name>CAS Validation Filter</filter-name>
    <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

</filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>http://47.92.125.222:8080/cas</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://47.92.125.222:8084</param-value>
    </init-param>
    <init-param>
        <param-name>redirectAfterValidation</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<!-- 該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取使用者的登入名。 比如AssertionHolder.getAssertion().getPrincipal().getName()-->

<filter>
    <filter-name>CAS Assertion Thread Local Filter</filter-name>
    <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>

 

<!—需要根據實際情況,將/*  改為具體的URL-->

<filter-mapping>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>CAS Authentication Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>CAS Assertion Thread Local Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

 

<listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>

第三步:定製獲取當前使用者資訊

單點登入整合,需要應用系統呼叫統一使用者管理系統(SSO Server)提供的API來獲取。

應用系統根據需要定製調整,可以封裝成一個單獨的類,可以直接拷貝下面的程式碼片段在需要獲取當前使用者的地方直接使用。

/* 引入介面類 */

import org.jasig.cas.client.util.AssertionHolder;

import java.util.*;

 

……

 

Map<String,Object> attrMap = null;

Assertion assertion= null;

try{

assertion = AssertionHolder.getAssertion();

attrMap = assertion.getPrincipal().getAttributes();

}catch (Exception e){

        logger.error("獲取登入使用者物件失敗!!!");

}

 

if(null == attrMap || 0 == attrMap.size()){

       //需要跳轉到登入頁面重新登入

       ……

       

}else{

   //需要應用系統編寫程式碼,從attrMap獲取業務需要的當前登入使用者資訊。

   ……

   String account=(String)attrMap.get(“ACCOUNT”);

 

   ……

 

}

 

……

 

 

attrMap包含的登入使用者資訊,分為企業使用者和內部使用者兩種,兩種不同使用者的資料項也有所不同,具體如下:

1、企業使用者屬性

ACCOUNT        //賬號

TYPE           //賬號型別   TYPE=3

TELEPHONE      //手機號

CHECK_STATE    //稽核狀態   0:未稽核   1:已稽核

COMPANY_NAME   //企業名稱

AREA_CODE      //企業所在省份行政區劃程式碼)

AREA_NAME      //企業所在名稱

 

2、內部使用者屬性

ACCOUNT         //賬號

TYPE            //賬號型別   TYPE=1

TELEPHONE       //手機號

NAME            //姓名

CARD_ID         //身份證號

ORG_CODE        //所在機構編碼

ORG_NAME        //所在機構名稱

ORG_STATE       //所在機構狀態     0:正常    1:待登出

PARENT_ORGCODE  //上級檢驗機構編碼

SUR_TYPE         //是否驗船師

SEX             //性別     1:男   2:女

NATION          //民族(程式碼)

BIRTH           //出生年月

POLICTICAL      //政治面貌(程式碼)

EDUCATION       //學歷(程式碼)

MAJORS          //專業(程式碼)

WORK_HISTORY     //工作履歷

EMAIL           //郵箱

第四步:賬號資訊同步

4.2、企業使用者

1、企業賬號同步,採取在企業第一次登入業務系統時,由業務系統同步到業務系統

1)企業賬號登入業務系統後,通過呼叫統一使用者提供的介面,獲取到當前登入賬號資訊(見第三步:定製獲取當前使用者資訊)。

(2)獲取ACCOUNT值,在本地登入登入

在的本地登入時,到本地資料庫查詢,如果沒有該賬號,說明賬號還沒同步,就將獲取的該賬號的資訊插入到業務系統的資料庫,同時預設授權(實名認證)。

(3)在業務系統稽核完企業賬號的實名認證,呼叫統一使用者提供的介面,將賬號狀態變為“已稽核”(使CHECK_STATE=1)。

2、企業第一個註冊的賬號,通過實名認證後,自動成為企業管理員,可以在統一使用者管理中為該企業新增其他賬號(企業管理員新增的賬號不用再做實名認證,企業管理員可以不再新增新賬號)。

新新增的賬號,仍採取在企業第一次登入業務系統時,由業務系統呼叫統一使用者提供的介面,將獲取到當前登入賬號資訊(見第三步:定製獲取當前使用者資訊)插入到業務系統的庫表,同時預設授予跟第一個企業賬號一樣的許可權。

4.2、對於內部使用者

內部使用者同步,通過主資料實現同步,新增一個內部使用者,需要在業務系統中授權才能進入業務系統辦理業務。

業務系統授權時,觸發一下同步操作,將資料同步到應用系統。