国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于CAS的單點登錄

2019-12-10 09:48蔡建軍魏金津任女爾
電腦知識與技術(shù) 2019年28期

蔡建軍 魏金津 任女爾

摘要:建設(shè)車企的單點登錄系統(tǒng),可以提升其用戶體驗,提高其使用軟件的效率。為了滿足車企定制化的軟件業(yè)務(wù)需求而基于CAS二次開發(fā)單點登錄系統(tǒng)。使用Apache Shiro框架去整合CAS客戶端開發(fā),可以大大提高開發(fā)效率和系統(tǒng)可靠性。對于企業(yè)不同的系統(tǒng)需要根據(jù)其具體架構(gòu)使用不同的方法去集成CAS客戶端。

關(guān)鍵詞:CAS;單點登錄;Shiro

中圖分類號:TP319? ? ? ? 文獻標識碼:A

文章編號:1009-3044(2019)28-0251-05

開放科學(xué)(資源服務(wù))標識碼(OSID):

1概述

隨著車企業(yè)務(wù)的快速發(fā)展,內(nèi)部系統(tǒng)不斷增多,每個系統(tǒng)都有自己的認證體系,用戶需要記住每個系統(tǒng)的用戶名和密碼并在訪問時輸入校驗,這樣是非常麻煩的,所以用戶希望只需要登錄一次就可以訪問所有指定的被信任的應(yīng)用系統(tǒng)。

某車企的需求是將A、B、C三套系統(tǒng)進行單點登錄整合,要求其中一個系統(tǒng)登錄之后便可通過菜單鏈接到別的系統(tǒng)。A與C系統(tǒng)的登錄用戶用的是同一數(shù)據(jù)庫的同一用戶表,B系統(tǒng)的登錄用戶雖然和A、C不同,但是可以經(jīng)由一定的關(guān)系映射過去。A、B系統(tǒng)所用框架是基于傳統(tǒng)XML Spring的,而C系統(tǒng)是基于新的SpringBoot【1】框架開發(fā)的。

針對此車企的單點登錄需求我們選擇了CAS去開發(fā)實現(xiàn)。CAS全稱為Central Authentication Service,中文意思是中央認證服務(wù),是一個實現(xiàn)單點登錄的開源框架,分為客戶端與服務(wù)端兩部分。

CAS服務(wù)端用來負責(zé)用戶的認證工作,會提供一個統(tǒng)一的登錄頁面,用戶輸入登錄名、密碼登錄后CAS會生成一個ticket存在服務(wù)器,還會生成一個類似cookie的票據(jù)返回客戶端,用戶下次訪問帶上票據(jù)經(jīng)過CAS驗證后便可以訪問系統(tǒng)。

系統(tǒng)集成CAS客戶端,便可以接入CAS服務(wù)。當(dāng)用戶訪問車企集成完CAS客戶端的系統(tǒng)時,系統(tǒng)先判斷是不是登錄,沒有登錄則重定向到CAS服務(wù)端的統(tǒng)一登錄頁面,用戶再通過登錄名、密碼登錄。

由于CAS服務(wù)端無法滿足車企業(yè)務(wù)的需求,我們還需要對其進行二次開發(fā)。三個系統(tǒng)之前的登錄功能都要廢棄,登錄統(tǒng)一到一個系統(tǒng)。選用Apache Shiro【2】為安全框架去整合使用CAS,可以大大提高集成的效率與可靠性。

2 CAS介紹

1)術(shù)語

Ticket Granting ticket (TGT):可以認為是CAS Server根據(jù)用戶名密碼生成的一張票,存在Server端。

Ticket-granting cookie (TGC):其實就是一個Cookie,存放用戶身份信息,由Server發(fā)給Client端。

Service ticket (ST):由TGT生成的用于驗證并且只能用一次的票據(jù)。相當(dāng)于CAS服務(wù)端發(fā)給客戶端的票,下次CAS客戶端帶著票找服務(wù)端校驗。

2)處理流程

1、用戶訪問系統(tǒng),若是沒有登錄,就重定向到CAS服務(wù)端的登錄頁面,URL形如http ://cas-ip:port/login?service=http ://ip:port,service后面的地址就是登錄成功后要重定向的系統(tǒng)URL。

2、在登陸頁面輸入用戶名密碼認證,認證成功后CAS服務(wù)端生成TGT,再用TGT生成一個ST。然后再第三次重定向并返回ST和cookie(TGC)到瀏覽器。

3、瀏覽器帶著ST再訪問想要訪問的地址http://ip:port /?ticket=ST-36828-xpvUKEdxVfeiPM0Sauz8,ticket后面那一串便是ST。

4、瀏覽器的服務(wù)器收到ST后再去CAS服務(wù)器驗證一下是不是為本身簽發(fā)的,驗證經(jīng)由過程后就會表現(xiàn)頁面信息,也便是重定向到第1步service后面的那個URL,首次登陸完畢。

5、再登陸另一個接入CAS服務(wù)端的客戶端體系,重定向到CAS服務(wù)端,Server判定是第一次來(可是此時有TGC,也便是cookie,所以不用去登錄頁面了),但此時沒有ST,去cas-server申請一個于是重定向到cas-server,形如:http://cas-ip:port /login?service=http://ip:port&&TGC(cookie)。

6、CAS服務(wù)端生成ST,重定向到瀏覽器http ://ip:port/?ticket=ST-31868-uiopasdcftqsxzmklgv6-yyyy。

7、瀏覽器的服務(wù)器收到ST后再去cas-server驗證一下是否為自己簽發(fā)的,驗證通過后就會顯示頁面信息(同第4步)。

3 CAS服務(wù)端二次開發(fā)

我們選擇使用Apache的CAS Server為單點登錄服務(wù)器,但是其功能遠遠不能滿足我們的需求,這個時候我們就需要基于源碼進行二次開發(fā)。

3.1 環(huán)境搭建

采用maven overlays特性(通路徑下的同名文件會使用最新的資源文件替換已有war目錄中下的資源文件)搭建,只需引入Maven【3】依賴:

3.2修改CAS服務(wù)器端登錄認證方式為數(shù)據(jù)庫認證

CAS服務(wù)端初始提供的是比較簡單的用戶名、密碼認證,這顯然是不能滿足車企需求的。在此我們需要修改使其支持基于數(shù)據(jù)庫的用戶名密碼校驗。

3.3 添加驗證碼校驗

為了車企的安全起見,防止Cas Server被惡意登錄及防暴力登錄【4】。這里采用驗證碼校驗。

1) 引入Maven依賴

com.google.code.kaptcha

kaptcha

2) 配置web.xml

下面的內(nèi)容需要添加進src\main\webapp\WEB-INF\web.xml文件中:

<!-- Captcha -->

Kaptcha

com.google.code.kaptcha.servlet.KaptchaServlet

kaptcha.border

no

kaptcha.textproducer.char.space

5

kaptcha.textproducer.char.length

5

Kaptcha

/captcha.jpg

3) UsernamePasswordCaptchaCredential

創(chuàng)建UsernamePasswordCaptchaCredential繼承自

org.jasig.cas.authentication.RememberMeUsernamePasswordCredential,拓展了一個驗證字段captcha

@NotNull

private String captcha;

4) 添加驗證碼校驗

代碼略

5) 配置login-webflow.xml

修改文件src\main\webapp\WEB-INF\login-webflow.xml,該文件是Spring Web Flow的配置文件。在這里定義說明了全部CAS服務(wù)端的登錄校驗認證流程。接下來,需要在登錄屬性表單中添加驗證碼字段及添加修改有關(guān)涉及驗證碼校驗的流程替換原來的credential配置為我們新建的UsernamePasswordCaptchaCredential

3.4 CAS登錄頁定制

1) 拷貝資源文件

事先讓美工設(shè)計一套登錄頁面。然后將css、image、js拷貝到src\main\webapp\css src\main\webapp\images src\main\webapp\js目錄下。

2) 修改casLoginView.jsp

4 集成CAS客戶端

4.1 引入Maven依賴

采用Shiro集成CAS單點登錄客戶端,添加Maven依賴:

4.2 ShiroFilter

配置ShiroFilter攔截外來請求,下圖在ShiroCasFilterConfiguration類配置/api/**為authc,也就是api路徑下的所有請求都必須登錄才能訪問。而其他路徑下的請求則不受此約束。

Shiro集成CAS,其實就是將CasFilter加入到其Filter鏈中,對指定url訪問請求用CasFilter進行攔截,實現(xiàn)單點登錄、登出的校驗功能。

4.3 CasRealm

Shiro的核心配置是Realm,一般項目中繼承Authorizingrealm類,實現(xiàn)其中的doGetAuthenticationInfo和doGetAuthorizationInfo方法。doGetAuthenticationInfo方法用于用戶認證,可以設(shè)置登錄后Session中的數(shù)據(jù),doGetAuthorizationInfo用于授權(quán),角色、權(quán)限分配。

Shiro集成CAS也是自定義realm繼承CasRealm,由于認證在CAS服務(wù)端已經(jīng)完成,CAS客戶端只需要把CAS認證返回的token結(jié)合起來,加入自己的角色、權(quán)限控制業(yè)務(wù)等等就行。

數(shù)據(jù)資源中心的車企項目現(xiàn)在都是基于SpringBoot框架開發(fā)的,但是很多老項目是基于傳統(tǒng)XML Spring【5】開發(fā)的,兩者集成CAS客戶端的方法不同但是基本原理是相同的。

5 配置與部署

1) 配置數(shù)據(jù)庫連接

2) 部署方式

將CAS服務(wù)打成war包,放入tomcat運行,根據(jù)需要修改war包名,比如叫castest.war,tomcat啟動以后,war包會被解壓。在webapps\castest\WEB-INF下可以看見deployerConfigContext.xml,可以直接修改配置文件然后重啟tomcat實現(xiàn)功能,數(shù)據(jù)庫連接也可以在這里修改。

6 總結(jié)

CAS是實現(xiàn)單點登錄的開源框架,對CAS系統(tǒng)進行二次開發(fā),可以滿足車企多系統(tǒng)統(tǒng)一認證登錄的需求。Apache Shiro是主流的Java安全框架,采取Shiro去整合CAS客戶端的集成,可以大大提高集成的效力與可靠性。由于車企系統(tǒng)有的是基于SpringBoot的,有的是基于傳統(tǒng)XML Spring的,所以在客戶端集成過程中會有一定差異,但是基本原理是一樣的。通過單點登錄的建設(shè),大大提升了用戶的體驗,提高了軟件系統(tǒng)的利用效力,在車企用戶中獲得了一致的好評。

參考文獻:

[1] 楊家煒.基于Spring Boot的web設(shè)計與實現(xiàn)[J].輕工科技,2016(7).

[2] 丁潔.基于Shiro的Web應(yīng)用安全框架設(shè)計研究[J].信息與電腦,2018(13):18.

[3] 江日念,林霞,喬德新.Maven在Java項目中的引入及應(yīng)用[J].電腦知識與技術(shù),2013.

[4] 汪潁.對于虛擬服務(wù)器SSH暴力登錄攻擊的防范[J].中國科技縱橫,2013(1).

[5] 張文宇,許明健,薛昱.論Spring的零配置與XML配置[J].計算機系統(tǒng)應(yīng)用,2015.

【通聯(lián)編輯:朱寶貴】

寿宁县| 肇庆市| 麻江县| 文水县| 新丰县| 泸西县| 绥棱县| 子长县| 丹阳市| 永顺县| 英吉沙县| 白水县| 莱阳市| 衡阳县| 大英县| 射洪县| 从化市| 淮滨县| 巴马| 康马县| 会东县| 滨州市| 临沂市| 渑池县| 鄂托克前旗| 阳高县| 三亚市| 大安市| 长武县| 伽师县| 仙游县| 上林县| 宜兰市| 青州市| 凤翔县| 和龙市| 灵宝市| 义马市| 上栗县| 丰镇市| 南宫市|