久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Yale CAS + .net Client 實現(xiàn) SSO(5)

 開發(fā)老者 2013-11-08

原文地址: http://www.cnblogs.com/zhenyulu/archive/2013/01/27/2878935.html

第一部分:安裝配置 Tomcat

第二部分:安裝配置 CAS

第三部分:實現(xiàn) ASP.NET WebForm Client

第四部分:實現(xiàn)基于數(shù)據(jù)庫的身份驗證

第五部分:擴展基于數(shù)據(jù)庫的身份驗證

第六部分:自定義登錄頁面

第五部分:擴展基于數(shù)據(jù)庫的身份驗證


1. 應用場景

前面提到的基于數(shù)據(jù)庫的集中身份驗證主要是通過用戶名,、密碼的方式完成驗證操作,,然而在實際使用過程中,,用戶可能需要多種形式的認證手段,,除了用戶名密碼的方式外,,還可能通過郵箱或手機號登錄,,但不管使用何種方式登錄,,都對應同一用戶。下圖演示了淘寶網(wǎng)在登錄時允許用戶以“手機號/會員名/郵箱”三種方式登錄系統(tǒng),。

CAS005001

 

2. 數(shù)據(jù)庫設計

針對上述需求,,重新設計數(shù)據(jù)庫字段,如下圖所示:

CAS005002

輸入測試用數(shù)據(jù),如下圖所示:

CAS005003

 

3. 自定義數(shù)據(jù)庫驗證Handler

關(guān)于自定義數(shù)據(jù)庫驗證Handler的文章比較多,,我主要參考了《CAS擴展——自定義查詢數(shù)據(jù)庫驗證Handler》和《CAS重新實現(xiàn)登陸認證邏輯》。但是這兩篇文章介紹的相對較糙,,對于不了解Java的人來說實施起來著實有點困難,,所以在這里我將兩人的東西綜合一下并給出詳盡的操作流程供參考。

說明:大家可以從解壓縮的“cas-server-3.5.1\cas-server-support-jdbc\src”文件夾下找到“QueryDatabaseAuthenticationHandler.java”的源代碼以及其它相關(guān)源碼供參考,。

(1)安裝Eclipse,。Eclipse是非常常用的一種Java編輯器。為了完成組件編寫,,我們首先需要安裝Eclipse,。Eclipse的下載與安裝非常簡單,在這里就不再贅述,。

(2)啟動Eclipse,,選擇“File/New/Java Project”,打開新建項目對話框,,在“Project Name”文本框中輸入“MultiCriteriaQueryDatabaseAuthenticationHandler”,,單擊“Finish”按鈕。如下圖所示:

CAS005004

(3)在“Package Explorer”中右擊項目“MultiCriteriaQueryDatabaseAuthenticationHandler”,,選擇“New/Folder”,,在彈出的對話框中輸入“lib”并單擊“Finishe”按鈕。

CAS005005

CAS005006

(4)從解壓縮的“cas-server-3.5.1\modules”文件夾中找到“cas-server-core-3.5.1.jar”與“cas-server-support-jdbc-3.5.1.jar”兩個文件,,將其拷貝到新建的“l(fā)ib”文件夾下,。

(5)從網(wǎng)上搜索并下載“spring.jar”與“javax.validation-1.0.0.GA.jar”兩個文件,也將其拷貝到新建的“l(fā)ib”文件夾,。刷新后的項目如下圖所示:

CAS005007

(6)在“Package Explorer”中右擊項目“MultiCriteriaQueryDatabaseAuthenticationHandler”,,選擇“Build Path/Add External Archives...”,依次將剛才拷貝到lib文件夾下的四個jar文件添加至項目的“Reference Libraries”中,。完成后的界面如下圖所示:

CAS005008

CAS005009

(7)在“src”文件夾上右擊,,選擇“New/Class”,彈出新建Java類對話框,。在Package文本框中輸入“org.jasig.cas.adaptors.jdbc”,,在Name文本框中輸入“MultiCriteriaQueryDatabaseAuthenticationHandler”,單擊“Finish”按鈕,。

CAS005010

(8)用下面的代碼替換“MultiCriteriaQueryDatabaseAuthenticationHandler.java”文件中的現(xiàn)有代碼,,單擊保存按鈕保存修改。

復制代碼
package org.jasig.cas.adaptors.jdbc;

import org.jasig.cas.authentication.handler.AuthenticationException;
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import org.springframework.dao.IncorrectResultSizeDataAccessException;

import javax.validation.constraints.NotNull;

public class MultiCriteriaQueryDatabaseAuthenticationHandler extends
        AbstractJdbcUsernamePasswordAuthenticationHandler {

    @NotNull
    private String getPwdSql;

    @NotNull
    private String getUsernameSql;

    protected final boolean authenticateUsernamePasswordInternal(
            UsernamePasswordCredentials credentials)
            throws AuthenticationException {
        final String id = getPrincipalNameTransformer().transform(
                credentials.getUsername());
        final String password = credentials.getPassword();
        final String encryptedPassword = this.getPasswordEncoder().encode(
                password);

        try {
            String dbPassword = getJdbcTemplate().queryForObject(
                    this.getPwdSql, String.class, new Object[] { id, id, id });

            String username = getJdbcTemplate().queryForObject(
                    this.getUsernameSql, String.class,
                    new Object[] { id, id, id });

            credentials.setUsername(username);
            return dbPassword.equals(encryptedPassword);
        } catch (final IncorrectResultSizeDataAccessException e) {
            // this means the username was not found.
            return false;
        }
    }

    public void setGetPwdSql(final String getPwdSql) {
        this.getPwdSql = getPwdSql;
    }

    public void setGetUsernameSql(final String getUsernameSql) {
        this.getUsernameSql = getUsernameSql;
    }
}
復制代碼

(9)在“Package Explorer”中右擊項目“MultiCriteriaQueryDatabaseAuthenticationHandler”,,選擇“Export...”打開Export對話框,。

CAS005011

(10)在“Export”對話框中選擇“JAR file”,單擊“Next”按鈕,。

CAS005012

(11)在JAR文件設置對話框中,,去掉“l(fā)ib”文件夾前面的對勾,,同時去掉“.classpath”和“.project”前面的對勾,選擇JAR文件的保存路徑到桌面,,單擊“Finish”按鈕,。如下圖所示:

CAS005013

(12)將桌面上生成的“MultiCriteriaQueryDatabaseAuthenticationHandler.jar”文件拷貝至“%TOMCAT_HOME%\webapps\cas\WEB-INF\lib”文件夾下。

(13)以管理員身份啟動文本編輯器,,打開“%TOMCAT_HOME%\webapps\cas\WEB-INF\deployerConfigContext.xml”,。找到下面的代碼(這段代碼是上篇博文中我們添加進去的):

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
    <property name="sql" value="select Password from users where username=?" />
    <property name="dataSource" ref="dataSource" />
</bean>

(14)將上面這段代碼注釋掉,并在其下插入如下配置信息并保存:

<bean class="org.jasig.cas.adaptors.jdbc.MultiCriteriaQueryDatabaseAuthenticationHandler">  
  <property name="getPwdSql" value="select password from users where username=? or email=? or mobile=?" />  
  <property name="getUsernameSql" value="select username from users where username=? or email=? or mobile=?" />  
  <property name="dataSource" ref="dataSource" />  
</bean>

CAS005014

(15)重新啟動Tomcat服務,。

 

4.測試自定義數(shù)據(jù)庫身份驗證Handler

從客戶端運行前面調(diào)試好的WebForm程序(請參考:Yale CAS + .net Client 實現(xiàn) SSO(3)),,輸入用戶名“admin”或“[email protected]”或“12345678901”、密碼“123”,,測試是否登錄成功,。可以看到,,不管用戶使用郵件還是手機號登錄,,客戶端始終顯示用戶名,而非郵箱和手機號,。這是因為在MultiCriteriaQueryDatabaseAuthenticationHandler.java代碼中如下代碼所決定的:

String username = getJdbcTemplate().queryForObject(
        this.getUsernameSql, String.class,
        new Object[] { id, id, id });

credentials.setUsername(username);

登錄后的用戶界面如下圖所示:

CAS005015

 

待續(xù)...


    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多