SpringBoot+CAS Client 實(shí)現(xiàn)單點(diǎn)登錄
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
66套java從入門到精通實(shí)戰(zhàn)課程分享
本文主要介紹在使用SpringBoot的開發(fā)過程中如何整合CAS Client實(shí)現(xiàn)單點(diǎn)登錄的功能。
準(zhǔn)備工作
(1)搭建好CAS服務(wù)端(參考:https://blog.csdn.net/u014553029/article/details/88102311)
(2)準(zhǔn)備好一個(gè)普通的SpringBoot Web項(xiàng)目
集成
一、引入CAS client依賴
在pom.xml中引入CAS Client的依賴包。代碼如下:
????net.unicon.cas
????cas-client-autoconfig-support
????2.1.0-GA
二、配置
在application.properties或者application.yml中添加相關(guān)配置,主要配置內(nèi)容包括服務(wù)器的相關(guān)地址,客戶端的相關(guān)地址等。我這里是application.yml,配置內(nèi)容如下:
cas:
??#后端服務(wù)地址
??client-host-url:?http://127.0.0.1:8888
??#cas認(rèn)證中心地址
??server-url-prefix:?http://146.56.192.87:8080/cas
??#cas認(rèn)證中心登錄地址
??server-login-url:?http://146.56.192.87:8080/cas/login
??validation-type:?cas3
三、在啟動(dòng)類中添加啟用注解
//啟用CAS
@EnableCasClient
@SpringBootApplication
public?class?SpringBootSsoApplication?{
????//省略部分內(nèi)容
}
四、編寫測(cè)試方法
@Controller
public?class?TestController?{
????@Value(value?=?"${cas.server-url-prefix}")
????private?String?serverUrlPrefix?=?"";
????@Value(value?=?"${cas.client-host-url}")
????private?String?clientHostUrl?=?"";
????@GetMapping("user")
????@ResponseBody
????public?String?user(HttpServletRequest?request)?{
????????Assertion?assertion?=?(Assertion)?request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
????????String?loginName?=?null;
????????if?(assertion?!=?null)?{
????????????AttributePrincipal?principal?=?assertion.getPrincipal();
????????????loginName?=?principal.getName();
????????????System.out.println("訪問者:"?+?loginName);
????????}
????????return?"訪問者:"?+?loginName;
????}
????@RequestMapping("/logout")
????public?String?logout(HttpSession?session)?{
????????session.invalidate();
????????return?"redirect:"?+?serverUrlPrefix?+?"/logout?service="?+?clientHostUrl?+?"/sso-client/user";
????}
}
五、測(cè)試登錄與退出
5.1 登錄:
(1)打開瀏覽器訪問:http://127.0.0.1:8888/sso-client/user
(2)由于沒有登錄,重定向到:http://146.56.192.87:8080/cas/login?service=http://127.0.0.1:8888/sso-client/user
(3)輸入用戶名密碼,點(diǎn)擊登錄,成功之后跳轉(zhuǎn)到http://127.0.0.1:8888/sso-client/user中

5.2 退出:
(4)訪問:http://127.0.0.1:8888/sso-client/logout
(5)cas完成退出,并跳轉(zhuǎn)到http://127.0.0.1:8888/sso-client/user,由于該地址需要登錄,仍會(huì)重定向到登錄界面
5.3 驗(yàn)證單點(diǎn):
(6)在啟動(dòng)一個(gè)客戶端,端口為8889,項(xiàng)目名稱為sso-client1

(7)訪問:http://127.0.0.1:8889/sso-client1/user,直接獲取到用戶信息,不需要登錄。單點(diǎn)認(rèn)證驗(yàn)證完成。
注意:
(1)未認(rèn)證授權(quán)的服務(wù),不允許使用CAS來認(rèn)證您訪問的目標(biāo)應(yīng)用。
修改WEB-INF\classes\services\HTTPSandIMAPS-10000001.json
"serviceId"?:?"^(https|imaps)://.*"??
改為?
"serviceId"?:?"^(https|imaps|http)://.*"
(2)WEB-INF\classes\application.properties
#?Service?Registry(服務(wù)注冊(cè))
#?開啟識(shí)別Json文件,默認(rèn)false
cas.serviceRegistry.initFromJson=true
#?保存tgc
cas.tgc.secure=false
#?默認(rèn)情況下退出登錄時(shí),頁面將會(huì)跳轉(zhuǎn)到CAS服務(wù)器內(nèi)部的注銷頁面?casLogoutView.jsp?,
#?如果我們需要在退出登錄后,跳轉(zhuǎn)到指定頁面,需要將下列參數(shù)設(shè)為true,在退出登錄的url里需要添加service參數(shù),
#?該參數(shù)指定在注銷后需要跳轉(zhuǎn)的頁面,配置允許登出后跳轉(zhuǎn)到指定頁面
cas.logout.followServiceRedirects=true
#跳轉(zhuǎn)到指定頁面需要的參數(shù)名為?service(default)
cas.logout.redirectParameter=service
#在退出時(shí)是否需要?確認(rèn)一下??true確認(rèn)?false直接退出
cas.logout.confirmLogout=false
#是否移除子系統(tǒng)的票據(jù)
cas.logout.removeDescendantTickets=true
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/u014553029/article/details/111601235
粉絲福利:Java從入門到入土學(xué)習(xí)路線圖
???

?長按上方微信二維碼?2 秒
感謝點(diǎn)贊支持下哈?
