Liferay中使用CAS實現單點登陸(SSO)
單點登陸(SSO)的實現方式有很多種,這裡所說的是用CAS實現,這也是Liferay中所採納的方式。至於什麼是CAS,單點登陸實現的原理等,這裡不做解釋,直接一步一步明說實現方式,好了,多一個字的費話也不說了。
第一步,建立證照
keytool -genkey -alias tomcat -keystore c:\mykeystore -dname "CN=xyb, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass 123456 -storepass 123456
PS:
-genkey 建立一個證照
-alias 證照的別名
-keystore 指定生成此證照的路徑(可不寫,預設存在系統的Home目錄下.keystore檔案中
-storepass 指定金鑰庫的密碼
-keypass 指定別名條目的密碼
-dname 指定證照擁有者資訊(可不寫,但,系統會提示你依次輸入這些資訊,特別要注意“CN”的值是你想做為CAS伺服器的這臺機器的域名或機器名,但就是不能是IP)
-keyalg 指定金鑰的演算法(可不寫)
-validity 指定建立的證照有效期多少天(可不寫,預設為90天)
第二步,匯出證照
keytool -export -alias tomcat -keystore c:\mykeystore -file c:\mycerts.cer -storepass 123456
PS:
-export 將別名指定的證照匯出到檔案
-keystore 指定生成此證照的路徑(上一步中寫的什麼這就寫什麼,如果沒寫,這也不寫)
-file 指定匯出到檔案的檔名
第三步,把匯出的證照匯入到客戶端伺服器
keytool -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass 123456 -file c:\mycerts.cer
PS:
-import 將已簽名數字證照匯入金鑰庫
-file 指定要匯入到金鑰庫的檔名(也就是上一步匯出的那個檔案)
有一個提示:是否信任這個證照,輸入 Y,回車。
第四步,下載cas整合包。將下載後的檔案改名為cas-web,放置在liferay的webapps目錄下,在conf/server.xml中找到下面這段,去掉原有的註釋並修改為:
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
第五步,在Liferay的webapps\ROOT\WEB-INF\classes\portal-ext.properties下新增如下內容:
cas.auth.enabled=true
cas.login.url=https://xyb:8443/cas-web/login
cas.logout.url=https://xyb:8443/cas-web/logout
cas.server.name=客戶端IP:8080
cas.service.url=
#cas.service.url=http://localhost:8080/c/portal/login
cas.validate.url=https://xyb:8443/cas-web/proxyValidate
如果沒在Liferay下,只是普通的Web程式可用Filter來實現,開啟Web-INF\Web.XML檔案,增加如下程式碼
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://xyb:8443/cas-web/login</param-value>
</init-param><!--這裡的xyb是CAS服務端的IP或機器名-->
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://xyb:8443/cas-web/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>localhost:8080</param-value><!--client:port就是需要CAS需要攔截的地址和埠,一般就是這個TOMCAT所啟動的IP和port-->
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern><!--這裡就是你要攔截的URL請求-->
</filter-mapping>
最後一步,在客戶端獲取CAS認證通過的使用者名稱,並修改身份驗證程式為只通過使用者名稱來驗證。如是在Liferay下就不用做這一步了,Liferay中本身的驗證是ScreenName欄位
1、在JSP或Servlet中的用法:
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
2、在Java中通過 Session 獲取登入使用者名稱
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
3、在 JSTL 中獲取使用者名稱的方法
![](https://i.iter01.com/images/ea7a9e36beee9904d0abed517f411f79c70bbe9ef388f1aa08aeddcfee3f60cc.gif)
問題彙總:
嚴重: edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator prox
yList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://192.168.1.111:8443/cas/proxyValidate] ticket=[ST-0-9h7Mx5HK3pfsdxRv
MD3y] service=[http%3A%2F%2F192.168.1.222%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
這個CAS異常是從CAS Client裡面丟擲,是當我們不使用證照的CN去訪問域名的時候(比如上文是用IP訪問而且證照的CN是該IP對應的域名而非該IP),CASClient無法信任,也就是我上面特意提到的那個CN的問題。要特別注意。
還有一種情況就是客戶端證照沒有匯入,同樣也報這個錯誤,最終可以歸為一句話,肯定是證照驗證沒有通過所致.
INFO [org.jasig.cas.authentication.AuthenticationManager
Impl] - <AuthenticationHandler: cn.com.tiansky.cas.authenticationHandlers.UPAuthenticationHandler successfully authenticated the user which provided the followi
ng credentials: [username: test]>
就種錯誤,可能是客戶端的那個配置檔案裡寫的不太對。也就是上面說的第五步,要多注意一下。
java.io.IOException: Cannot recover key
at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14Socket
Factory.java:125)
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESo
cketFactory.java:88)
at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoi
nt.java:292)
at org.apache.coyote.http11.Http11BaseProtocol.init(Http11BaseProtocol.j
ava:138)
at org.apache.catalina.connector.Connector.initialize(Connector.java:101
這種錯誤,可能是你生成的證照有問題,如果keypass和storepass的密碼不一致也會把這個錯(不知為什麼非要設成一樣的)
相關文章
- CAS單點登入(SSO)實戰(一)
- CAS實現單點登入SSO執行原理探究
- 14、sso單點登陸
- CAS SSO單點登入框架學習框架
- CAS實現單點登入SSO執行原理探究(終於明白了)
- 單點登陸原理及程式碼(CAS)
- Casdoor + OAuth 實現單點登入 SSOOAuth
- CAS SSO單點登入服務端環境搭建服務端
- CAS SSO單點登入客戶端環境搭建客戶端
- OAuth2實現單點登入SSOOAuth
- apereo cas單點登陸返回多個屬性
- 實戰模擬│單點登入 SSO 的實現
- 記一次 SSO 單點登入實現
- 3.CAS SSO單點登入客戶端環境搭建客戶端
- SSO 單點登入
- SSO單點登入
- 單點登入(SSO)
- 談談SSO單點登入的設計實現
- 跨域分散式系統單點登入的實現(CAS單點登入)跨域分散式
- JEECG 單點登入 SSO
- 初探單點登入 SSO
- CAS SSO單點登入服務端環境搭建之框架深度分析服務端框架
- CAS SSO單點登入客戶端環境搭建之框架深度分析客戶端框架
- 2.CAS SSO單點登入服務端環境搭建原始碼服務端原始碼
- 單點登陸
- .關於CAS SSO單點登入服務端環境搭建原始碼分析服務端原始碼
- 關於CAS SSO單點登入客戶端環境搭建原始碼分析客戶端原始碼
- SSO單點登入邏輯
- Spring Security系列教程之實現CAS單點登入上篇-概述Spring
- CAS單點登入-簡介
- CAS單點登入-https配置HTTP
- 基於CAS的WEB單點登入(sso)服務端及其tomcat/nginx https配置Web服務端TomcatNginxHTTP
- 2.關於CAS SSO單點登入服務端環境搭建原始碼服務端原始碼
- 3.CAS SSO單點登入客戶端環境搭建&原始碼獲取客戶端原始碼
- 什麼是單點登入(SSO)
- Spring Cloud企業架構之CAS SSO單點登入服務端環境搭建SpringCloud架構服務端
- Spring Cloud 企業架構之CAS SSO單點登入服務端環境搭建SpringCloud架構服務端
- Spring Cloud 企業架構之CAS SSO單點登入服務端環境搭建SpringCloud架構服務端
- Spring Cloud 企業架構之CAS SSO單點登入服務端環境搭建SpringCloud架構服務端