之前在服務(wù)端整合了數(shù)據(jù)庫,也完成的動(dòng)態(tài)service配置,我們一直在操作cas服務(wù)器端,這里我們就來使用springboot完成cas客戶端的接入操作。
環(huán)境概述
ip | 端口 | 對應(yīng)服務(wù) |
---|---|---|
127.0.0.1 | 8443 | CAS服務(wù)器 |
127.0.0.1 | 9001 | CAS客戶端1 |
127.0.0.1 | 9002 | CAS客戶端2 |
service配置(服務(wù)端)
客戶端接入 CAS 首先需要在服務(wù)端進(jìn)行注冊,否則客戶端訪問將提示“未認(rèn)證授權(quán)的服務(wù)”警告:
為了方便后面測試,我們這里對所有https和http請求的service進(jìn)行允許認(rèn)證,在resources/services
下新建文件HTTPS_HTTP-10000001.json
,這個(gè)文件是我從cas源代碼同路徑下拷貝過來的。
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^(https|imaps|http)://.*",
"name" : "測試客戶端",
"id" : 100002,
"description" : "這是一個(gè)測試客戶端的服務(wù),所有的https或者h(yuǎn)ttp訪問都允許通過",
"evaluationOrder" : 2
}
注意:
services目錄中可包含多個(gè) JSON 文件,其命名必須滿足以下規(guī)則:${name}-${id}.json
,id必須為json文件中內(nèi)容id一致。
對其中屬性的說明如下,更多詳細(xì)內(nèi)容見官方文檔-Service-Management。
- @class:必須為org.apereo.cas.services.RegisteredService的實(shí)現(xiàn)類
- serviceId:對服務(wù)進(jìn)行描述的表達(dá)式,可用于匹配一個(gè)或多個(gè) URL 地址
- name: 服務(wù)名稱
- id:全局唯一標(biāo)志
- description:服務(wù)描述,會顯示在默認(rèn)登錄頁
- evaluationOrder:定義多個(gè)服務(wù)的執(zhí)行順序
application.properties:
##
# service 注冊配置
#
#開啟識別json文件,默認(rèn)false
cas.serviceRegistry.initFromJson=true
#自動(dòng)掃描服務(wù)配置,默認(rèn)開啟
#cas.serviceRegistry.watcherEnabled=true
#120秒掃描一遍
#cas.serviceRegistry.repeatInterval=120000
#延遲15秒開啟
#cas.serviceRegistry.startDelay=15000
#默認(rèn)json/yml資源加載路徑為resources/services
#cas.serviceRegistry.config.location=classpath:/services
啟動(dòng)cas-server
啟動(dòng)信息中如果發(fā)現(xiàn)下圖日志表示注冊成功
同時(shí)由于我們配置了mysql數(shù)據(jù)庫動(dòng)態(tài)service,系統(tǒng)會自動(dòng)見json中的service同步到數(shù)據(jù)庫中:
客戶端配置
新建cas-client1客戶端工程
具體步驟這里就不詳細(xì)說明引入cas-client依賴
這里引入別人寫好的cas-client-autoconfig-support
的starter類,當(dāng)前最新版:2.3.0-GA
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.3.0-GA</version>
</dependency>
- 配置CAS服務(wù)器和客戶端地址
#cas配置
#cas服務(wù)端前綴,不是登錄地址
cas.server-url-prefix=http://localhost:8443/cas
#cas的登錄地址
cas.server-login-url=http://localhost:8443/cas/login
#當(dāng)前客戶端的地址
cas.client-host-url=http://localhost:9001
#Ticket校驗(yàn)器使用Cas30ProxyReceivingTicketValidationFilter
cas.validation-type=CAS3
- 開啟CAS Client支持
@SpringBootApplication
@EnableCasClient//開啟cas
public class Client1Application {
public static void main(String[] args) {
SpringApplication.run(Client1Application.class, args);
}
}
- 編程測試Controller
@RestController
public class UserController {
@GetMapping("/hello")
public String hello() {
return "恭喜CAS客戶端整合成功";
}
}
- 瀏覽器輸入:http://localhost:9001/hello, 系統(tǒng)沒有登陸會自動(dòng)重定向到cas服務(wù)端登陸頁面
-
輸入:admin/123456 登陸后,會重定向會目標(biāo)路徑
注意:
如果引入https必須保證客戶端證書和服務(wù)端證書是同一個(gè)證書,不然就會報(bào)錯(cuò)。
sudo keytool -import -file /Users/wangsaichao/Desktop/tomcat.cer -alias tomcat -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit