搭建CAS服務器,並實現一個簡單的單點登陸的demo

官網:http://jasig.github.io/cas/
Cas Server下載:http://developer.jasig.org/cas/
Cas Client下載:http://developer.jasig.org/cas-clients/
測試環境:
  jdk:java version "1.8.0_60"
  tomcat:apache-tomcat-7.0.65
  CAS Server:cas-server-4.0.0-release.zip
  CAS Client:cas-client-3.1.12-release.zip


首先安裝jdk、Tomcat ,這裏安裝不作介紹。

進入正題:

1、使用java keytool工具爲系統生成https證書,併爲系統註冊

一、生成證書文件
keytool -genkey -alias asq -keyalg RSA -keystore g:/keys/asqjava

 


二、導出證書文件
keytool -export -file g:/keys/asq.crt -alias asq -keystore g:/keys/asqgit

 


生成到指定目錄下的兩個文件github

 




三、將證書導入到客戶端JRE中(注意、是導入JRE中),若是security中已經存在cacerts,須要先將其刪除。
keytool -import -keystore "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts" -file g:/keys/asq.crt -alias asqweb

 


2、配置服務器端 (單獨放到一個Tomcat中 ,端口號8080,並進行以下配置)
 一、從http://developer.jasig.org/cas/上下載cas服務器端cas-server-4.0.0-release.zip,在modules目錄下找到cas-server-webapp-4.0.0.war,
將其複製到%TOMCAT_HOME%\webapps下,並將名稱改成cas.warapache

 


 二、修改%TOMCAT_HOME%\conf\server.xml文件,添加如下代碼

tomcat

<!--keystoreFile  生成的證書文件  keystorePass  祕鑰庫密碼  -->
<Connector SSLEnabled="true" clientAuth="false" 
           keystoreFile="F:/keys/castest" keystorePass="123456" 
   maxThreads="150" port="8443" 
   protocol="org.apache.coyote.http11.Http11Protocol" 
   scheme="https" secure="true" sslProtocol="TLS"/>



三、啓動Tomcat,測試:https://localhost:8443/ 服務器

 



若是能夠正常訪問,說明證書安裝成功session

 




4.訪問https://localhost:8443/cas/login,出現如下畫面:

app

 



輸入帳號和密碼
  casuser
  Mellon
登陸以後:webapp

 



此時說明服務器端已經配置成功。可經過https://localhost:8443/cas/logout退出登陸


3、配置cas client 客戶端(單獨一個Tomcat服務器,注意與cas server 的服務器端口號不要衝突,這裏默認改爲18080)

一、建立maven web項目 cas-client1。(以前已經建立一個,要部署多個client ,因此建立cas-client2)

 



建立出簡單的一個web項目,只有一個index.jsp頁面 ,如下是client2的目錄結構

 



二、在pom.xml文件中添加cas-client 的依賴(能夠手動添加,將從http://developer.jasig.org/cas-clients/上下載cas-client-3.1.12-release.zip,
在modules目錄下找到cas-client-core-3.1.12.jar、commons-collections-3.2.jar、commons-logging-1.1.jar複製到項目WEB-INF/lib下)

pom.xml添加如下代碼:

    <dependency>
      <groupId>org.jasig.cas</groupId>
      <version>3.1.1</version>
      <artifactId>cas-client-core</artifactId>
    </dependency>



三、在cas-client2項目的web.xml中配置cas 的過濾器

 <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>/CasClient/*</url-pattern>
  </filter-mapping>

  <!-- 該過濾器負責用戶的認證工做,必須啓用它 -->
  <filter>
    <filter-name>CASFilter</filter-name>
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
      <param-name>casServerLoginUrl</param-name>
      <!--這裏是搭建的 cas server 服務端的IP-->
      <param-value>https://sso.castest.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>CASFilter</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.castest.com:8443/cas</param-value><!-- 此處必須爲登陸url/cas/,帶有任何其它路徑都會報錯,如「https://sso.castest.com:8443/cas/login」,這樣也會報錯。 -->
    </init-param>
    <init-param>
      <param-name>serverName</param-name>
      <!--這裏注意url 的路徑,sso.client1.com 在host文件中配置對應的127.0.0.1
           端口號必定要與啓動Tomcat服務器的端口一致,通常cas server 服務器單獨部署,
           -->
      <param-value>http://sso.client1.com: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>

  <!-- ======================== 單點登陸結束 ======================== -->

  <!-- session超時定義,單位爲分鐘 -->
  <session-config>
    <session-timeout>2</session-timeout>
  </session-config>



四、在index.jsp中添加隨意標識,用於區分不一樣的應用程序

 



五、利用maven打包工具,將項目打壓成一個war包,在這裏注意:jar包的名稱就是對應訪問的端口號後面的項目名
在這裏使用IDEA的maven工具,點擊 package生成war包

 


在target目錄中生成了咱們須要的war包

 



六、將該war包放到cas client Tomcat中的webapps中

 




七、修改Tomcat目錄下的conf中server.xml ,將端口號改成18080 ,具體修改以下:

 <Server port="18005" shutdown="SHUTDOWN">

 <Connector port="18080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

 <Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />
 <!---注意redirectPort 重定向端口號,必須跟cas server的端口號一致-->




八、啓動cas-client 的Tomcat 服務器

file://C:\Users\lucky\AppData\Local\Temp\ct_tmp/16.png



九、先訪問 url1 :localhost:18080/cas-client1/index.jsp 

     而後訪問url2: localhost:18080/cas-client2/index.jsp
當訪問url1的時候,成功跳轉到cas server服務器上

 


登陸驗證以後 ,成功跳轉到client1的index.jsp頁面

 



當訪問url1 而且登陸成功後 ,而後訪問url2 ,就不須要再次驗證身份,直接跳轉到client2的index.jsp頁面

 

一個最簡單的單點登陸至此所有完成

相關文章
相關標籤/搜索