之前在服務端整合了數(shù)據(jù)庫,也完成的動態(tài)service配置,我們一直在操作cas服務器端,這里我們就來使用springboot完成cas客戶端的接入操作。
環(huán)境概述
| ip | 端口 | 對應服務 |
|---|---|---|
| 127.0.0.1 | 8443 | CAS服務器 |
| 127.0.0.1 | 9001 | CAS客戶端1 |
| 127.0.0.1 | 9002 | CAS客戶端2 |
service配置(服務端)
客戶端接入 CAS 首先需要在服務端進行注冊,否則客戶端訪問將提示“未認證授權的服務”警告:

為了方便后面測試,我們這里對所有https和http請求的service進行允許認證,在resources/services下新建文件HTTPS_HTTP-10000001.json,這個文件是我從cas源代碼同路徑下拷貝過來的。
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^(https|imaps|http)://.*",
"name" : "測試客戶端",
"id" : 100002,
"description" : "這是一個測試客戶端的服務,所有的https或者http訪問都允許通過",
"evaluationOrder" : 2
}
注意:
services目錄中可包含多個 JSON 文件,其命名必須滿足以下規(guī)則:${name}-${id}.json,id必須為json文件中內容id一致。
對其中屬性的說明如下,更多詳細內容見官方文檔-Service-Management。
- @class:必須為org.apereo.cas.services.RegisteredService的實現(xiàn)類
- serviceId:對服務進行描述的表達式,可用于匹配一個或多個 URL 地址
- name: 服務名稱
- id:全局唯一標志
- description:服務描述,會顯示在默認登錄頁
- evaluationOrder:定義多個服務的執(zhí)行順序
application.properties:
##
# service 注冊配置
#
#開啟識別json文件,默認false
cas.serviceRegistry.initFromJson=true
#自動掃描服務配置,默認開啟
#cas.serviceRegistry.watcherEnabled=true
#120秒掃描一遍
#cas.serviceRegistry.repeatInterval=120000
#延遲15秒開啟
#cas.serviceRegistry.startDelay=15000
#默認json/yml資源加載路徑為resources/services
#cas.serviceRegistry.config.location=classpath:/services
啟動cas-server
啟動信息中如果發(fā)現(xiàn)下圖日志表示注冊成功

同時由于我們配置了mysql數(shù)據(jù)庫動態(tài)service,系統(tǒng)會自動見json中的service同步到數(shù)據(jù)庫中:

客戶端配置
新建cas-client1客戶端工程
具體步驟這里就不詳細說明引入cas-client依賴
這里引入別人寫好的cas-client-autoconfig-support的starter類,當前最新版:2.3.0-GA
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.3.0-GA</version>
</dependency>
- 配置CAS服務器和客戶端地址
#cas配置
#cas服務端前綴,不是登錄地址
cas.server-url-prefix=http://localhost:8443/cas
#cas的登錄地址
cas.server-login-url=http://localhost:8443/cas/login
#當前客戶端的地址
cas.client-host-url=http://localhost:9001
#Ticket校驗器使用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)沒有登陸會自動重定向到cas服務端登陸頁面

image.png
-
輸入:admin/123456 登陸后,會重定向會目標路徑
注意:如果引入https必須保證客戶端證書和服務端證書是同一個證書,不然就會報錯。
sudo keytool -import -file /Users/wangsaichao/Desktop/tomcat.cer -alias tomcat -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
