- 浏览: 248366 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (281)
- hibernate (16)
- sql工具 (2)
- eclipse (15)
- tomcat (13)
- 项目部署 (4)
- java (62)
- spring (15)
- EL (1)
- javascript (8)
- 正则表达式 (1)
- jQuery (4)
- mysql (15)
- jstl (1)
- jsp (1)
- eclipse,eclipse插件 (1)
- svn (4)
- java,resin (1)
- jdbc (1)
- jdk (2)
- android (21)
- resin (3)
- php (3)
- 其他 (2)
- 数据库 (2)
- cas单点登录 (2)
- 邮箱激活 (1)
- jad (1)
- 支付 (1)
- struts (1)
- jpa (1)
- struts2 (4)
- json (3)
- oracle (2)
- velocity (1)
- sina微博登陆 (2)
- qq账户登录 (1)
- spring security (1)
- java图片处理 (1)
- http请求 (1)
- cas springsecurity (1)
- freemarker (1)
- cas (6)
- java oauth2 (2)
- oauth2.0 (6)
- springsecurity oauth2 (1)
- sms (1)
- springmvc (2)
- spring aop (1)
- luaeclipse (1)
- cocos2d (1)
- hibernate缓存 (1)
- ibatis (1)
- linux (7)
- 技术网站 (1)
- python (2)
- hadoop (1)
- war3 (0)
- elasticsearch (2)
- jboss (1)
- spring data jpa (2)
- java json (1)
- jsonp (1)
- webservice (4)
- java多线程 (1)
- java加密解密 (1)
- spring task (1)
- java session and cookie (1)
- java nio (1)
- 缓存 (1)
- java大数据 (1)
- cygwin (1)
- 设计模式 (1)
- mybatis (2)
- jquery插件 (2)
- jvm内存溢出 (1)
- drools (1)
- cookie and session (1)
- jvm内存设置 (1)
- nginx (1)
- 微信 (1)
- extjs (1)
- redis (7)
- memcached (1)
- js闭包 (1)
- js (0)
- mongodb (3)
- dubbo (2)
- jdk版本问题 (1)
- opnfire (1)
- git (1)
- jsp视频播放 (1)
- 国际化 (1)
- 后台管理 (1)
- yum (1)
- k (1)
- 算法 (0)
- jvm优化 (1)
- java检测 (1)
- maven操作 (0)
- ios打包 (1)
- 网络通信 (1)
- node.js (1)
- maven (4)
- 消息队列 (2)
- springcloud (6)
- mq (2)
- idea (3)
- log4j (1)
- docker (4)
- editplus (1)
- springboot (1)
- Kubernetes (1)
- jenkins (1)
- websocket (1)
- thirft (1)
- strom (1)
- postman (1)
- kafka (1)
- 线程池 (1)
- JVisualVM (1)
- java反射 (1)
- shell (1)
- java8 (2)
- i18 (1)
- jvm (0)
- nio (1)
- nodejs (1)
- idea java (1)
最新评论
-
pengfeifei26:
wbzhaohl 写道这个有解决方案没有时间长了,貌似有点忘了 ...
A redirect is required to get the users approval -
wbzhaohl:
这个有解决方案没有
A redirect is required to get the users approval -
somebody:
恩。好吧。这个只有在 还没发布的 2.0 版本才有。
oauth2.0设置自动授权
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="eduPersonAffiliation" value="eduPersonAffiliation"/>
<entrykey="groupMembership" value="groupMembership" />
</map>
</property>
</bean>
-->
<!--新增attributeRepository配置(开始) -->
<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"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.InMemoryServiceRegistryDaoImpl">
<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.edu/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信息。
http://blog.csdn.net/ishallwin/article/details/8718675
通过上述部署与配置,多个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="eduPersonAffiliation" value="eduPersonAffiliation"/>
<entrykey="groupMembership" value="groupMembership" />
</map>
</property>
</bean>
-->
<!--新增attributeRepository配置(开始) -->
<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"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.InMemoryServiceRegistryDaoImpl">
<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.edu/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/> <br/>
http://blog.csdn.net/ishallwin/article/details/8718675
发表评论
-
Spring Security3源码分析-CAS支持
2013-09-25 10:56 839http://sishuok.com/forum/posts/ ... -
让CAS支持客户端自定义登陆页面——服务器配置
2013-09-25 10:31 39491、修改/WEB-INF/web.xml,为cas增加一个/r ... -
cas 客户端自定义页面-客户端
2013-09-25 10:27 17811、web-xml修改filter: <liste ... -
cas服务器登录成功后,报错
2013-09-24 18:06 1044AuthenticationViaFormAction类中su ... -
cas server端的login-webflow详细流程
2013-09-24 17:31 945http://blog.csdn.net/yaoweijq/a ...
相关推荐
总结起来,这个"单点登录cas服务器demo及springboot客户端demo"项目提供了一个实践单点登录概念的实例,涵盖了CAS服务器的搭建、Spring Boot应用的CAS客户端集成,以及Shiro或Pac4j的使用。对于想要学习和理解SSO...
前者作为CAS客户端,后者作为服务器端。这两个项目都可以在Eclipse中通过"Import Existing Maven Project"的方式导入。在开始之前,确保已安装MySQL数据库,并使用提供的SQL脚本`cas_server_demp.sql`和`cas_client_...
在用户访问受保护的页面时,检查是否已通过CAS验证。如果没有,重定向到CAS服务器进行身份验证: ```php if (!$cas->isAuthenticated()) { $cas->forceAuthentication(); } ``` #### 3.2 获取用户信息 验证成功...
而“客户端”则指与CAS服务器交互的应用系统,它们可以是任何需要用户认证的服务,通过集成CAS客户端库,能够实现与CAS服务器的通信,完成用户的SSO登录。 描述中提到的“各种版本都有”,意味着你可以根据项目需求...
- CAS服务器是整个系统的核心,它处理用户的登录请求,并向已认证的用户提供服务票(Service Ticket),这个票证用于验证用户身份。 - CAS 4.1.4 包含了服务器的部署文件、配置文件、以及必要的JAR库,这些文件...
**一、CAS服务器端** CAS服务器是整个单点登录的核心部分,它负责用户的身份验证。当用户尝试访问受CAS保护的应用时,会被重定向到CAS服务器进行身份验证。如果验证成功,CAS会返回一个票据(Ticket)给客户端浏览器...
- 应用通过这个ST向CAS服务器发送验证请求,获取用户信息。 4. **SSO会话管理**: - CAS客户端会处理从服务器返回的验证响应,如果成功,将在应用中创建或更新用户会话。 - 之后,用户在访问其他受保护的资源时...
为了让应用系统与CAS服务器交互,需要在每个应用中配置CAS客户端,通常包括配置服务URL、验证URL和证书信息。 7. **测试与调试** 完成配置后,测试SSO功能是否正常,确保用户能够无感知地在各个系统间切换,同时...
这个压缩包包含的是CAS服务器端API的3.5.3版本和CAS客户端核心组件3.3.3版本的CHM(Compiled Help Manual)文档。 `cas-3.5.3 api.chm` 文件提供了关于CAS服务器端API的详细信息。这个API是开发者构建和扩展CAS...
首先,`cas-server-3.4.10-release`是CAS服务器端的发布包。这个版本包含了运行CAS服务器所需的所有文件,包括JAR包、配置文件、文档等。服务器端的主要职责是处理用户的认证请求,验证用户凭证(如用户名和密码),...
ST是一次性的,只有对应的CAS客户端能够验证,通常生命周期很短。 - **TGT(Ticket Granting Ticket)**:票据授予票据,用于从CAS服务器获取ST的票据。TGT包含用户认证信息,用于在用户需要访问多个服务时重用用户...
1. 添加CAS客户端库依赖:在Java Web应用的`pom.xml`或`build.gradle`文件中引入CAS客户端库。 2. 配置CAS客户端:在Web应用的配置文件(如`web.xml`)中配置CAS过滤器,设定CAS服务器地址和服务URL。 3. 自定义认证...
在回调URL的页面上,你需要验证服务票证并获取用户的认证信息。这通常在Global.asax的`Application_AuthenticateRequest`事件中完成。 ```csharp protected void Application_AuthenticateRequest(Object sender, ...
接下来是`cas-client-3.2.1`,它是CAS客户端库,用于集成到各个应用系统中。主要功能包括: 1. **Ticket验证**:客户端会检查用户访问应用时携带的CAS服务票证(Service Ticket),并将其发送到CAS服务器验证。 2. ...
首先,需要使用 CAS 客户端 API logout 方法,然后将用户登出。 3. PHP 语言 PHP 是一种广泛使用的服务器端脚本语言,具有强大的功能和灵活性。在 PHP 中,可以使用 CAS 客户端来实现统一身份认证平台。 3.1 CAS ...
4. **CAS 服务器端的修改**: - 修改 `spring-configuration/ticketGrantingTicketCookieGenerator.xml` 文件,将 `cookieSecure` 属性设置为 `false`,以允许非 SSL 连接,避免重复登录问题。 - 在 `spring-...
在本“CAS单点登录demo”中,我们将深入探讨CAS的工作原理、配置步骤以及如何实现客户端与服务器端的交互。 1. CAS工作原理: CAS的核心思想是集中式的身份验证,用户只需在一个地方进行登录,之后访问其他已经...
2. 安装与配置:如何下载和部署CAS服务器,配置服务器端的设置。 3. 应用集成:如何将你的应用系统配置为CAS客户端,包括配置服务URL和服务验证过滤器。 4. 用户认证:介绍CAS支持的各种认证机制,如基于HTTP表单、...
这些文件可能包括了服务器端的Web应用程序部署文件(如.war文件)、客户端应用的配置文件(如web.xml)、以及相关的文档和教程。通过研究和运行这些示例,你可以了解到如何配置CAS服务器,创建服务定义,以及如何在...