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埠。