CAS實現單點登錄
CAS介紹
- 開源的企業級單點登錄解決方案
- CAS Server 是需要獨立部署的 Web 應用
- CAS Client 支持非常多的客戶端(這里指單點登錄系統中的各個 Web 應用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等 </ul>
- CAS服務端下載:http://downloads.jasig.org/cas/
- 解壓zip文件,改名為cas.war,然后復制到tomcat/webapp目錄下
- 瀏覽器訪問:http://localhost:8080/cas </ul>
- 創建證書
CAS服務部署

CAS-SERVER的默認驗證規則:只要用戶名和密碼相同就認證通過(僅僅用于測試,生成環境需要根據實際情況修改),輸入admin/admin 點擊登錄,就可以看到登錄成功的頁面
Tomcat配置HTTPS
這里使用JDK生成的證書,正式環境需購買專業提供商的證書
用JDK自帶的keytool工具生成證書:
keytool -genkey -alias xiaokaceng -keyalg RSA -keystore d :/cas/xiaokaceng
注意:127.0.0.1==sso.xiaokaceng.com 在C:\Windows\System32\drivers\etc\hosts配置,只能輸入域名不能輸入IP
- 導出證書
keytool -export -file d:/cas/xiaokaceng.crt -alias xiaoka ceng -keystore d:/cas/xiaokaceng
證書導出完成,可提供JDK使用
- JVM導入證書
keytool -import -keystore D:\JavaDev\jdk1.7\jre\lib\secur ity\cacerts -file d:\cas\xiaokaceng.crt -alias xiaokaceng
特別提示:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
那么請輸入密碼:changeit
- 應用到Web容器
啟用Tomcat的SSL,開啟83和87的注釋,配置keystoreFile和keystorePass
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="D:/cas/xiaokaceng" keystorePass="123456"/>
注意:keystoreFile和keystorePass有大小寫之分
CAS登錄
- 啟動兩個tomcat客戶端,修改其端口(tomcat默認自帶的 webapps\examples 作為演示的簡單web項目)
- 整合CAS-Client
CAS-Client 下載地址:http://downloads.jasig.org/cas-clients/,解壓并拷貝相應jar
修改web.xml
<!-- ======================== 單點登錄開始 ======================== -->
<!-- 用于單點退出,該過濾器用于實現單點登出功能,可選配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 該過濾器用于實現單點登出功能,可選配置。 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://sso.xiaokaceng.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://sso.xiaokaceng.com:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:18080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器負責實現HttpServletRequest請求的包裹,
比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登錄用戶的登錄名,可選配置。
-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登錄名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======================== 單點登錄結束 ======================== -->
測試驗證,訪問http://localhost:18080/examples/servlets/servlet/HelloWorldExample
CAS登出
退出鏈接為:https://sso.xiaokaceng.com:8443/cas/logout
CAS服務界面
- 登錄界面:casLoginView.jsp
- 登錄成功:casGenericSuccess.jsp
- 登出界面:casLogoutView.jsp
來自:http://my.oschina.net/u/1264515/blog/181598
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!