導航:首頁 > IDC知識 > cas伺服器

cas伺服器

發布時間:2020-08-07 12:03:22

1、cas單點登錄怎麼在伺服器端獲得用戶信息

通過上述部署與配置,多個Web應用已經可以共用一個登錄服務。但是,上述過程中作為CAS Client端的Web應用只取得了用戶登錄名稱信息,而在實際應用中,Web應用往往需要獲得登錄用戶更多的信息,例如會員等級、性別、住址等。要達到此目的,只需對Server端稍做修改即可實現。

1. 服務端配置及修改

假定上述存儲用戶信息的數據表userinfo中還包含一個名為address的用於存儲用戶地址的欄位,而Web應用程序希望能夠從CAS Server處獲得當前登錄用戶的地址信息,則Server端需要按以下內容修改deployerConfigContext.xml。部分配置說明請參見注釋。

<!--將原有attributeRepository配置注釋 -->

<!--

<beanid="attributeRepository"

class="org.jasig.services.persondir.support.StubPersonAttributeDao">

<propertyname="backingMap">

<map>

<entrykey="uid" value="uid" />

<entrykey="ePersonAffiliation" value="ePersonAffiliation"/>

<entrykey="groupMembership" value="groupMembership" />

</map>

</property>

</bean>

-->

<!--新增attributeRepository配置(開始) -->

<bean class="org.jasig.services.persondir.support.jdbc."id="attributeRepository">

<!-- 指定使用的數據源,此處dataSource是已配置好的數據源 -->

<constructor-arg index="0"ref="dataSource"/>

<!-- 從資料庫中查詢信息的SQL語句,通常只需要修改表名即可 -->

<constructor-arg index="1" value="select * fromuserinfo where {0}"/>

<propertyname="queryAttributeMapping">

<map>

<!-- 上述查詢的參數,將userName替換為表中表示用戶名的欄位名稱 -->

<entrykey="username" value="userName"/>

</map>

</property>

<propertyname="resultAttributeMapping">

<map>

<!-- 需要返回給Web應用的其它信息,多個信息時可繼續增加entry節點-->

<!--key值為數據表中的欄位名稱,value值為Client端取值時的名稱標識-->

<entry key="address" value="address"/>

</map>

</property>

</bean>

<!--新增attributeRepository配置(結束) -->

<bean

id="serviceRegistryDao"

class="org.jasig.cas.services.">

<propertyname="registeredServices">

<list>

<beanclass="org.jasig.cas.services.RegexRegisteredService">

<propertyname="id" value="0" />

<propertyname="name" value="HTTP and IMAP" />

<propertyname="description" value="Allows HTTP(S) and IMAP(S)protocols" />

<propertyname="serviceId" value="^(https?|imaps?)://.*" />

<propertyname="evaluationOrder" value="10000001" />

<!--增加此項配置 -->

<property name="ignoreAttributes" value="true"/>

</bean>

… …

</list>

</property>

</bean>

CASServer要將額外的信息傳遞至Client端,還需要修改完成信息組裝的文件WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp。casServiceValidationSuccess.jsp負責組裝包含用戶信息的XML,因此修改部分是將需要傳遞的額外信息加入到它最終生成的XML文件之中。具體修改如下:

<cas:serviceResponsexmlns:cas='http://www.yale.e/tp/cas'>

<cas:authenticationSuccess> <cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>

<!-- 新增額外信息(開始) -->

<c:iftest="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)> 0}">

<cas:attributes>

<c:forEachvar="attr"items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">

<!--注意此行的正確寫法,網上資料基本都是錯誤的--> <cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>

</c:forEach>

</cas:attributes>

</c:if>

<!-- 新增額外信息(結束) -->

<c:if test="${not emptypgtIou}">

<cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>

</c:if>

<c:if test="${fn:length(assertion.chainedAuthentications)> 1}">

<cas:proxies>

<c:forEachvar="proxy" items="${assertion.chainedAuthentications}"varStatus="loopStatus" begin="0"end="${fn:length(assertion.chainedAuthentications)-2}"step="1">

<cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>

</c:forEach>

</cas:proxies>

</c:if>

</cas:authenticationSuccess>

</cas:serviceResponse>

2. Java Client端取得更多用戶信息

Java Client端不需要做任何修改就可以繼續正常使用CAS服務,如果需要取得用戶更多信息,可以通過AttributePrincipal對象取得Attribute列表(一個Map對象)後進行查詢。

修改前述Java Client的示例代碼,在最後追加取得address信息的代碼,重啟服務並重新訪問頁面,可以看到頁面上顯示了當前用戶的address信息。
<%@pageimport="org.jasig.cas.client.authentication.AttributePrincipal" %>

<%@pageimport="org.jasig.cas.client.validation.Assertion" %>

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

<%

String loginName1 = request.getRemoteUser();

%>

request.getRemoteUser(): <%=loginName1%><br/>

<%

AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();

String loginName2 = principal.getName();

%>

request.getUserPrincipal().getName():<%=loginName2%><br/>

<%

Object object =request.getSession().getAttribute("_const_cas_assertion_");

Assertion assertion =(Assertion)object;

String loginName3 =assertion.getPrincipal().getName();

%>

request.getSession().getAttribute("_const_cas_assertion_").getPrincipal().getName():<%=loginName3%><br/>

2、cas單點登錄伺服器端跳轉指定應用問題

按照我最近剛做過的demo,應該是先訪問你工程的一個url,這時候cas伺服器進行驗證,如果之前登陸了,直接跳轉,如果沒登錄,會跳轉到cas伺服器的登錄頁面,這時候它會自動保存你之前請求的url地址,你輸入用戶名密碼驗證成功之後自動跳過去,還需要單獨設置么?

3、CAS單點登錄怎樣獲得伺服器IP地址

CAS 原理和協議 從結構上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 需要獨立部署,主要負責對用戶的認證工作;CAS Client 負責處理對客戶端受保護資源的訪問請求,需要登錄時,重定向到 CAS Server。圖1 是 CAS 最基本的協...

4、如何獲取cas應用中的伺服器和客戶端地址

 pter的updatecount方法,final ClientInfo clientInfo = ClientInfoHolder.getClientInfo();這行代碼是獲取客戶端IP和服務端IP

5、cas的客戶端與伺服器是否就不能布置在兩台機器上

完整的網路就麻煩了,你才有倆,還有其他部分才能連接得上。
先讓倆機器連通,不知道你有域明訪問還是IP,後者的話直接用,用名的話,把自己機器的hosts加入信息代替dns解析……

6、cas server 什麼意思

CAS server
通票售票處;
[例句]The following figure demonstrates the authentication flow path of a system that has a CAS server integrated.
下圖說明了在集成了CAS伺服器的系統中身份驗證是如何執行的。

7、CAS伺服器驗證成功返回到客戶端時,還是返回到登錄界面,不能返回到登錄成功之後的界面?

下面是我的配置。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">
<!-- CAS 相關配置文件-->
<!-- 單點登出,一定要在最前面 -->
<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>
<listener>
<listener-class>org.jasig.cas.client.session.</listener-class>
</listener>
<!--單點登錄 -->
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<!-- CAS login 服務地址-->
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://andy:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>renew</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>gateway</param-name>
<param-value>false</param-value>
</init-param>
<!-- 客戶端應用服務地址-->
<init-param>
<param-name>serverName</param-name>
<param-value>https://andy:8333</param-value>
</init-param>
</filter>

<!--負責Ticket校驗-->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<!-- 下面一定要是主機名稱 -->
<param-value>https://andy:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://andy:8333</param-value>
</init-param>
<init-param>
<param-name>useSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>redirectAfterValidation</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter>
<filter-name>CAS HttpServletRequest WrapperFilter</filter-name>
<filter-class>org.jasig.cas.client.util.</filter-class>
</filter>

<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 Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>CAS HttpServletRequest WrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- CAS 配置文件結束 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

8、exchange郵件伺服器 cas和hub mailbox 邊緣伺服器 都是什麼?

這是搭建郵件系統的三個角色 ,或者說是這三個組成部分組成的exchange郵件系統,cas是客戶端訪問角色:客戶端連接的時候就連接這個伺服器角色。hub就是集線器訪問角色,用來傳輸一些數據的。。mailbox是郵箱伺服器,裝載著收發的郵件,都在上面有殘留的。

9、cas-server 用什麼版本

首先確認證書文件已經拷貝到Tomcat的目錄下,我們新建兩個客戶端的web應用,分別命名為Client1,Client2,在頁面上稍作處理用於區分即可。 [注意] 我們使用兩個Tomcat,一個模擬伺服器,一個模擬客戶端。如果哦使用同一個Tomcat請注意區分埠!

10、為什麼的的CAS伺服器用HTTP能訪問用HTTPS就訪問不了呢?

你應該把你https訪問時候報的錯貼出來。另外,你的keystoreFile的位置,建議放到配置文件同一目錄下,寫絕對路徑能不能載入上,我不確定。另外就是要確定你在客戶端導入的證書是否正確,是否導入到了使用的JVM下。有些機器上存在很多JVM的,導錯位置很常見。還有,看一下你的客戶端的配置文件,是否訪問的https協議和8443埠。

與cas伺服器相關的知識