單點登錄糸統cas cas client 在jboss下安裝

  1. 安裝環境

jdk :1.7以上(必須要在1.7以上版本否則會導致登陸異常)

jboss: jboss-as-7.1.1.Final

 

cas-client-core-3.2.1.jar :CAS Client

opensaml-1.1.jar :OpenSAML是一個開源的OASIS安全斷言標記語言規範實施

cas-client-pcg.jar  :ASC自寫jar, 因CAS也不支持Jboss7,但通過開發調整,可以讓其client支持在Jboss7下驗證),驗證使用的關鍵類如下:

com.pcg.sso.cas.client.jboss.authentication.WebAuthenticationFilter (在jboss7下使用,jboss7使用自己實現容器,不再使用tomcat)

 com.pcg.sso.cas.client.jboss.authentication.WebAuthenticationFilter2(在jboss3~jboss6使用)

登出filter請使用我們自己寫的如下類:

com.pcg.sso.cas.client.session.SingleSignOutFilter

 

另外請特別保證登出的filter在所有的filter前面。

 

2.  jboss7 module安裝

jboss7變動很大jar不再以直接放入lib目錄下,可以通過配置module.xml選擇性加載

​​​​​​​2.1 安裝jdk1.7,解壓jboss-as-7.1.1.Final

​​​​​​​2.2 在jboss-as-7.1.1.Final\modules\com目錄下建立目錄pcg\sso\main

2.3 復制cas-client-core-3.2.1.jar (cas-client-3.2.1壓縮包modules目錄下),opensaml-1.1.jar,cas-client-pcg.jar

到pcg\sso\main目錄下

2.4 設定module.xml

內容如下

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.1" name="com.pcg.sso">

       <resources>

              <resource-root path="cas-client-pcg.jar"/>

              <resource-root path="cas-client-core-3.2.1.jar"/>

              <resource-root path="opensaml-1.1.jar"/>

       </resources>

 

       <dependencies>

              <module name="javax.api" />

              <module name="javax.servlet.api" />

              <module name="org.apache.santuario.xmlsec" />

              <module name="org.apache.commons.logging" />

              <module name="org.apache.log4j" />

              <module name="org.apache.commons.codec" />

       </dependencies>

</module>

 

com.pcg.sso       發布webapp中所可以引用的module名

resources            里是jar包文件

dependencies      jar包中類需要導入的類

3 jboss7 webapp configuration

3.1  編輯standalone.xml

3.1.1編輯  subsystem xmlns      urn:jboss:domain:ee:1.0 的節點在這加入上面配置的com.pcg.sso

module

變動前為 

<subsystem xmlns="urn:jboss:domain:ee:1.0"/>

變更后

<subsystem xmlns="urn:jboss:domain:ee:1.0">

       <global-modules>

              <module name="com.pcg.sso" slot="main"/>

       </global-modules>

</subsystem>

 

3.1.2編緝 subsystem xmlns     urn:jboss:domain:security:1.1的節點加入安全驗證服務器。

 

變更前

<subsystem xmlns="urn:jboss:domain:security:1.1">

       <security-domains>

              <security-domain name="other" cache-type="default">

                     <authentication>

                            <login-module code="Remoting" flag="optional">

                                       <module-option name="password-stacking" value="useFirstPass"/>

                             </login-module>

                             <login-module code="RealmUsersRoles" flag="required">

                                   <module-option name="usersProperties"

                                          value="${jboss.server.config.dir}/application-users.properties"/>

                                  <module-option name="rolesProperties"

                                          value="${jboss.server.config.dir}/application-roles.properties"/>

                                       <module-option name="realm" value="ApplicationRealm"/>

                                       <module-option name="password-stacking" value="useFirstPass"/>

                            </login-module>

                     </authentication>

              </security-domain>

              <security-domain name="jboss-web-policy" cache-type="default">

                     <authorization>

                            <policy-module code="Delegating" flag="required"/>

                     </authorization>

              </security-domain>

              <security-domain name="jboss-ejb-policy" cache-type="default">

                     <authorization>

                            <policy-module code="Delegating" flag="required"/>

                     </authorization>

              </security-domain>

       </security-domains>

</subsystem>

 

變動后

<subsystem xmlns="urn:jboss:domain:security:1.1">

       <security-domains>

              <security-domain name="other" cache-type="default">

                     <authentication>

                            <login-module code="Remoting" flag="optional">

                                   <module-option name="password-stacking" value="useFirstPass"/>

                            </login-module>

                            <login-module code="RealmUsersRoles" flag="required">

                                   <module-option name="usersProperties"

                                          value="${jboss.server.config.dir}/application-users.properties"/>

                                   <module-option name="rolesProperties"

                                          value="${jboss.server.config.dir}/application-roles.properties"/>

                                   <module-option name="realm" value="ApplicationRealm"/>

                                   <module-option name="password-stacking" value="useFirstPass"/>

                            </login-module>

                     </authentication>

              </security-domain>

              <security-domain name="jboss-web-policy" cache-type="default">

                     <authorization>

                            <policy-module code="Delegating" flag="required"/>

                     </authorization>

              </security-domain>

              <security-domain name="jboss-ejb-policy" cache-type="default">

                     <authorization>

                            <policy-module code="Delegating" flag="required"/>

                     </authorization>

              </security-domain>

 

              <security-domain name="cas" cache-type="default">

                     <authentication>

                            <login-module code="org.jasig.cas.client.jaas.CasLoginModule" flag="required">

                                   <module-option name="ticketValidatorClass"

                                          value="org.jasig.cas.client.validation.Saml11TicketValidator"/>

                                   <module-option name="casServerUrlPrefix"

                                          value="https://sso.pouchen.com/cas"/>

                                   <module-option name="defaultRoles" value="eip"/>

                                   <module-option name="roleAttributeNames"

                                          value="memberOf,eduPersonAffiliation"/>

                                   <module-option name="roleGroupName" value="Roles"/>

                                   <module-option name="principalGroupName" value="CallerPrincipal"/>

                                   <module-option name="cacheAssertions" value="false"/>

                                   <module-option name="cacheTimeout" value="480"/>

                                   <module-option name="tolerance" value="60000"/>

                                   <module-option name="encoding" value="UTF-8"/>

                            </login-module>

                     </authentication>

              </security-domain>

 

            </security-domains>

        </subsystem>

 

 

紅色區域內容為新增部分。

注意 https://sso.pouchen.com/cas   為CAS服務端 。

eip為默認角色 。

<login-module />code屬性請給我們自己寫的  com.pcg.sso.cas.client.jaas.CasLoginModule,否則當你用 cacheAssertions時登出將無無法達到預期的效果。

<module-option name="cacheAssertions" value="false"/> client端的ticket是否使用cache,默認為true。如果使用cache,只要URL給合法的ticket都能登錄通過,就算瀏覽器關閉後再開或session銷毀後都可以,只有通過logout才能登出;如果不是用cache則瀏覽器關閉後再開瀏覽器給合法的ticket都會要求重新登錄。

<module-option name="cacheTimeout" value="480"/> client端使用cache時,cache清空的時間間隔,單位為分鐘。

<module-option name="tolerance" value="60000"/>  CAS ClientServer之間的時間差可允許

的范圍以毫秒計算 這項必須設置正否則會導致登陸不通過。

<module-option name="encoding" value="UTF-8"/>  SAML消息內容之字符集,非常關鍵。

 

 

 3.1.3 編緝interfaces 節點(可選)

新增如下內容

<interface name="ipv4-global">

       <any-ipv4-address/>

</interface>

any-ipv4-address 這是為了讓jboss相關服務發布在其server所在的ipv4之IP上,這樣外部才能訪問這個CAS Client。

 

     然後找到socket-binding-group節點修改屬性default-interface為  ipv4-global 這樣所有的ip 都可以訪問這臺server。

 

備註:此點只是讓非本服務器外的IP能訪問到這個jboss提供的服務而已,方法有很多種,如直接在啟動命令後加入 -b 參數,或直接改<interface name="public" /> 內的jboss.bind.address值為本服務器IP等都可以。

 

 

3.2. 編輯jboss-web.xml

必須含有下述紅色部分內容,這裡說明下:jboss7裡的jndi地址不再使用java:/service/name 的方式,但是如果你仍繼續使用這種形式也是可以的,所以下述方式<security-domain/>內的內容如果是java:/jaas/cas 也沒有問題,jboss7仍然兼容之前版本的jndi命名方式。

<?xml version="1.0" encoding="UTF-8"?>

<jboss-web>

       <security-domain>cas</security-domain>

</jboss-web>

 

 

3.3 編輯web.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true">

 

       <display-name>Welcome to Test</display-name>

       <description>Welcome to Test</description>

 

       <context-param>

              <param-name>serverName</param-name>

              <param-value>http://172.17.45.92:8080</param-value>

       </context-param>

 

       <context-param>

              <param-name>casServerLoginUrl</param-name>

              <param-value>https://sso.pouchen.com/cas/login</param-value>

       </context-param>

 

       <context-param>

              <param-name>system</param-name>

              <param-value>en_US:Test System|zh_TW:測試系統</param-value>

       </context-param>

       <!--  removeTicket 默認為true,如果默認符合您的需要則下述參數無需設置

       <context-param>

              <param-name>removeTicket</param-name>

              <param-value>true</param-value>

       </context-param>

       -->

       <!-- Facilitates CAS single sign-out -->

       <listener>

              <listener-class>

                     org.jasig.cas.client.session.SingleSignOutHttpSessionListener

              </listener-class>

       </listener>

 

       <!-- Following is needed only if CAS single-sign out is desired -->

       <filter>

              <filter-name>CASSingleSignOutFilter</filter-name>

              <filter-class>com.pcg.sso.cas.client.session.SingleSignOutFilter</filter-class>

       </filter>

 

       <!-- Only 2 CAS filters are required for JAAS support -->

       <filter>

              <filter-name>CASWebAuthenticationFilter</filter-name>

              <filter-class>com.pcg.sso.cas.client.jboss.authentication.WebAuthenticationFilter

                     </filter-class>

       </filter>

 

       <filter>

              <filter-name>CASAuthenticationFilter</filter-name>

              <filter-class>com.pcg.sso.cas.client.authentication.AuthenticationFilter</filter-class>

       </filter>

 

       <!-- CAS client filter mappings -->

       <!-- The order of the following filters is vitally important -->

       <filter-mapping>

              <filter-name>CASSingleSignOutFilter</filter-name>

              <url-pattern>/*</url-pattern>

       </filter-mapping>

 

       <filter-mapping>

              <filter-name>CASWebAuthenticationFilter</filter-name>

              <url-pattern>/*</url-pattern>

       </filter-mapping>

 

       <filter-mapping>

              <filter-name>CASAuthenticationFilter</filter-name>

              <url-pattern>*.jsp</url-pattern>

       </filter-mapping>

 

       <filter-mapping>

              <filter-name>CASAuthenticationFilter</filter-name>

              <url-pattern>*.zul</url-pattern>

       </filter-mapping>

 

       <security-constraint>

              <display-name>Test app Constraint</display-name>

              <web-resource-collection>

                     <web-resource-name>Protected Area</web-resource-name>

                     <url-pattern>/*</url-pattern>

              </web-resource-collection>

       </security-constraint>

</web-app>

 

 

需要變更的參數配置:

serverName :CAS Client ipport

casServerLoginUrl: CAS Server 登陸的url

system:CAS Client傳給CAS Server 在登錄界面顯示的糸統名稱。參數格式system=locale1:xxx|locale2:yyy,當直接是system=xxx時,則所有語言的系統名稱都顯示為 xxx,傳入多語糸系統名稱使用“|”來分隔,無對應語言的系統名稱時,CAS Server會取糸統默契值(如繁體中文為“單一簽入系統”)。請注意web.xml編碼encoding="UTF-8"

removeTicket:值為true或false表示登錄成功后是否在url中移除ticket,不設定默契為true。另外如果app處於移除ticket的設定時,想讓某個請求不移除ticket,則可以通過url傳值方式設定,傳值方式為removeTicket=false。

 

CAS client 保護資源:

不能用JEE web中通用的 <security-constraint />,而要使用它的 filter CASAuthenticationFilter進行。

CASAuthenticationFilter的默認配置如下(保護所有資源):
<filter-mapping>
       <filter-name>CASAuthenticationFilter</filter-name>
       <url-pattern>/*</url-pattern>
</filter-mapping>

需要對*.jsp*.zul進行保護的話,則可以改成如下:

<filter-mapping>
        <filter-name>CASAuthenticationFilter</filter-name>
       <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
       <filter-name>CASAuthenticationFilter</filter-name>
       <url-pattern>*.zul</url-pattern>
</filter-mapping>

需要對/index.jsp,/protected/*進行保護的話,則可以改成如下:

<filter-mapping>
       <filter-name>CASAuthenticationFilter</filter-name>
       <url-pattern>/index.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
       <filter-name>CASAuthenticationFilter</filter-name>
       <url-pattern>/protected/*</url-pattern>
</filter-mapping>

訪問其它未被保護的資源時,將不需要進行驗證。

 

關於CAS的logout,請調用對應CAS server的/cas/logout 即可,如果希望登出後返回app頁面,可傳入service參數對應app的相關頁面,如 https://sso.pouchen.com/cas/logout?service=http://172.17.45.92:8080/test/index.jsp 登出後cas會重定位到

http://172.17.45.92:8080/test/index.jsp  上。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4 測試

用eclipse建立test工程

在WEB-INF下加入上面所編輯的 jboss-web.xml,web.xml

 

新建index.jsp內容如下:

 

<%@page contentType="text/html; charset=UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<%@ page import="java.util.Map"%>

<%@ page import="com.pcg.sso.cas.client.plugin.UserAttribute"%>

<!DOCTYPE HTML PUBLIC

       "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>CAS Test</title>

</head>

<body>

       <h1>CAS Test</h1>

       <p>now is <%=new java.util.Date()%></p>

       <p><%=request.getRemoteUser()%></p>

       <%

              UserAttribute ua = new UserAttribute(request);

              Map<String, Object> personAttrs = ua.getMap();

              // 打印用戶LDAP帳號的所有屬性和值

              if (null != personAttrs && !personAttrs.isEmpty()) {

                     for (String key : personAttrs.keySet()) {

                            out.println(key + " = " + personAttrs.get(key));

                            out.println("<br>");

                     }

              }

              // 集團員工號的key為"groupEmployeeID"可以直接通過下述方式獲得

              String empId =  (String)personAttrs.get("groupEmployeeID");

              out.println("groupEmployeeID : " + empId + "<br>");

       %>

</body>

</html>

 

jboss-web.xml,web.xml ,index.jsp打成 test.war(注意必須要使用war包)包發布到jboss-as-7.1.1.Final\standalone\deployments 目錄下。

 

使用http://CAS-Client-IP:Port/test訪問CAS-Client ,會跳轉到 CAS-Server先進行登陸,登陸成功 轉至 http://CAS-Client-IP:Port/test/index.jsp 。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 jboss-4.2.2.GA下安裝

jboss4.2與jboss7稍有不同,變更如下

5.1 module安裝

上面2 jboss7 module安裝變為如下

安裝jdk1.7,解壓jboss-4.2.2.GA

復制cas-client-core-3.2.1.jar,opensaml-1.1.jar,cas-client-pcg.jar到 jboss-4.2.2.GA\server\default\lib

編輯jboss-4.2.2.GA\server\default\conf\login-config.xml

policy下增加子節點

<application-policy name = "cas">

       <authentication>

              <login-module code="com.pcg.sso.cas.client.jaas.CasLoginModule" flag="required">

                     <module-option name="ticketValidatorClass">

                            org.jasig.cas.client.validation.Saml11TicketValidator

                     </module-option>

                     <module-option name="casServerUrlPrefix">

                            https://sso.pouchen.com/cas

                     </module-option>

                     <module-option name="defaultRoles">eip</module-option>

                     <module-option name="roleAttributeNames">

                            memberOf,eduPersonAffiliation

                     </module-option>

                     <module-option name="roleGroupName">Roles</module-option>

                     <module-option name="principalGroupName">CallerPrincipal</module-option>

                     <module-option name="cacheAssertions">false</module-option>

                     <module-option name="cacheTimeout">480</module-option>

                     <module-option name="tolerance">60000</module-option>

                     <module-option name="encoding">UTF-8</module-option>

              </login-module>

       </authentication>

</application-policy>

 

5.2 webapp configuration

上面3.1  編輯standalone.xml變為如下

 編緝jboss-4.2.2.GA\server\default\deploy\jboss-web.deployer\server.xml去掉服務端口訪問ip限定

調整前如下

<Connector port="8080"  address="${jboss.bind.address}"

       maxThreads="250" maxHttpHeaderSize="8192"

       emptySessionPath="true" protocol="HTTP/1.1"

       enableLookups="false" redirectPort="8443" acceptCount="100"

       connectionTimeout="20000" disableUploadTimeout="true" />

調整后如下

<Connector port="8080"

       maxThreads="250" maxHttpHeaderSize="8192"

       emptySessionPath="true" protocol="HTTP/1.1"

       enableLookups="false" redirectPort="8443" acceptCount="100"

       connectionTimeout="20000" disableUploadTimeout="true" />

 

5.3 web.xml

上面3.3 編輯web.xml中的

CASWebAuthenticationFilter 改為

com.pcg.sso.cas.client.jboss.authentication.WebAuthenticationFilter2


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值