`
zt843217
  • 浏览: 10546 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[SSO技术]CAS在tomcat下的部署和定制(下篇)

阅读更多
转自:http://hi.baidu.com/zh_m_zhou/blog/item/a56123071aeae77c02088196.html
作者:pocky

引言:

SSO,即Single sign on/off,单点登录/退出。

CAS,全称JA-SIG Central Authentication Service,实现SSO的开源项目。

说明:

在上篇中,我们完成了CAS在tomcat下的部署工作,下篇中,将以定制和扩展为主。

环境:

Windows XP

JDK1.5

Tomcat6.0

JBoss-4.2.2.GA

MySQL5.0

准备:

完成上篇的操作流程

定制和扩展1:定制登录页面试图

1.    在目录“ cas_server/WEB-INF/view/jsp/default/ui ” 下

l casConfirmView.jsp: 当用户选择了“ warn ”时会看到的确认界面

l casGenericSuccess.jsp: 在用户成功通过认证而没有目的Service时会看到的界面

l casLoginView.jsp: 当需要用户提供认证信息时会出现的界面

l casLogoutView.jsp: 当用户结束 CAS 单点登录系统会话时出现的界面

2.    在目录“cas_server /WEB-INF/view/jsp/default/ui/includes ” 下

l top.jsp: 上述4个文件的头部文件

l buttom.jsp: 上述4个文件的尾部文件

3.    在目录“cas_server /WEB-INF/classes ”下

l 包含各个语言的porp文件(比较casLoginView.jsp文件)

4.    在目录“cas_server /js”下

l common_rosters.js(参见casLoginView.jsp文件注释)

5.       一切页面特调包括闪烁的效果都是css和js绑定标签id的效果,改动css文件或者修改id立可还原纯文本布局。

定制和扩展2:从tomcat移植到JBoss下

1.       完成基本配置,同tomcat下的相同,其中server.xml文件在目录jboss4.4\server\default\deploy\jboss-web.deployer目录下

2.       Jboss的jsf和sun的jsf冲突,所以将jboss4.4\server\default\deploy\jboss-web.deployer\jsf-libs下的jsf-api.jar和jsf-impl.jar复制覆盖掉cas_server工程lib下的2个jar文件

注意事项:不要复制多余的jar到工程下,一旦与jboss下的jar发生重复的冲突,会报类型转换错误的error。

定制和扩展3:通过直接访问数据库定制密码验证
CAS Server

1.       在deployerConfigContext.xml文件中加入dateSource的Bean

         <bean id="casDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

                   <property name="driverClass" value="com.mysql.jdbc.Driver" />

                   <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/portal" />

                   <property name="user" value="root" />

                   <property name="password" value="root" />

         </bean>

2.       加入包:

         c3p0-0.9.1.jar

         mysql-connector-java-5.1.5-bin.jar

         cas-server-support-jdbc-3.3.1.jar(来自于cas-server-3.3.1.zip)

         spring-jdbc-2.5.5.jar

3.       在deployerConfigContext.xml文件中

         注释掉:

         <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePassword
AuthenticationHandler" />

         换成:

         <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

         <property name="dataSource" ref="casDataSource" />

         <property name="sql" value="select PWD from USER where lower(NAME) = lower(?)" />

    <property name="passwordEncoder" ref=" passwordEncoder "/>

         </bean>

4.       新建类org.jasig.cas.authentication.handler.MyPasswordEncoder
(继承org.jasig.cas.authentication.handler.PasswordEncoder接口及其 encode() 方法),在encode()方法中实现加密算法。

添加:

<bean id="passwordEncoder"
            class="org.jasig.cas.authentication.handler.MyPasswordEncoder"/>

Date Base

按照xml中的配置,在本地搭建mySQL数据库,建立名为portal的schema,创建USER表,至少拥有字段NAME和PWD
说明

以上操作完成CAS对密码校验的定制,通过读取MySQL数据库中指定的表字段,附带密码加密类,但不包括加密算法。(详见参考文档1)

定制和扩展4:登录验证之添加“用户不存在”错误信息
CAS Server

1.       类org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler (参考 “定制和扩展3”)在验证时,当用户名正确但密码错误时抛出特定Exception,比如抛出异常:

org.jasig.cas.authentication.handler. BadPasswordAuthenticationException

2.       找到这个Exception类,将它的CODE值:
error.authentication.credentials.bad.usernameorpassword.password复制到cas_server根目录下的prop文件中,如:messages_zh_CN.properties,在这个文件中添加一行:
error.authentication.credentials.bad.usernameorpassword.password=您的密码错误。

3.       以上,完成了一种错误信息的提示,你可以继续按照这个异常类创建更多的错误信息,提示如:“对不起,用户不存在!”之类各种错误信息。

定制和扩展5:定制Session返回用户ID
说明

CAS Server默认的是验证用户名和密码,验证成功后返回用户名到客户端。

假设,由于用户名不是唯一的,客户端希望在验证成功后返回用户ID,如何实现?
CAS Server

找到类org.jasig.cas.authentication.principal.UsernamePasswordCredentials

添加id属性及其getter,setter方法:

private String userid;
       public final String getUserid() { return userid; }

       public final void setUserid(String userid) { this.userid = userid; }

找到类org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver

注释代码:

return usernamePasswordCredentials.getUsername();

添加代码:

return usernamePasswordCredentials.getUserid();

类org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler (参考 “定制和扩展3”)

在必要的地方添加代码:

credentials.setUserid("u85425");

这样,客户端从session中取得的就将是"u85425"。

定制和扩展6:Cas Server的中文乱码问题

按照参考文档6操作,确认可行。其中协议为cas2.0,设置为gb2312。(详见参考文档6)

参考文档

1.        使用CAS在Tomcat中实现单点登录(定制和接口类的扩展)

http://hi.baidu.com/leon1509/blog/item/990f7422c96deaa14623e823.html

http://hi.baidu.com/leon1509/blog/item/28ca4e2c64f763e98a13992c.html

2.        cas单点退出代码解读

http://www.blogjava.net/xmatthew/archive/2008/07/09/213808.html

3.        cas单点退出代码Demo

http://blog.sina.com.cn/s/blog_4aebeb1201008eg3.html

4.        cas单点退出代码(好多文章啊 关键1:CAS Server需要3.1.2及以上版本)

http://iroyce.iteye.com/category/16769?show_full=true

5.        CAS Logout 问题(关键2:要通过https退出)

http://www.fish888.com/CAS-Logout-t133632

6.        CAS Server的中文乱码解决方案

http://hi.baidu.com/mleoking/blog/item/982eb709ac76dcca3bc76306.html

<下篇完>
分享到:
评论

相关推荐

    CAS SSO

    9. **部署与配置**:CAS可以部署在多种环境中,如Tomcat、Jetty等Web服务器,配置通常涉及设置服务器端点、数据库连接、认证策略等。 10. **最佳实践**:在实施CAS时,应考虑最佳实践,如使用HTTPS、定期更新CAS...

    Yale CAS Server的部署及cas-java-client 3.2的应用

    这篇文章将详细介绍如何部署Yale CAS Server以及如何在Java应用中使用cas-java-client 3.2进行集成。 首先,我们需要了解Yale CAS Server的部署过程。这通常包括以下几个步骤: 1. **环境准备**:确保你有一个适合...

    定制cas单点登录用户名密码验证

    这些文件名暗示了学习资源的内容,包括Yale大学的CAS教程、关于CAS的Java开发者论坛讨论、一篇关于CAS最佳实践的文章以及一篇关于在Tomcat上开发CAS单点登录并定制认证方式的博客文章。这些资料将提供详细的步骤、...

    Yale CAS最佳实践.rar

    1. **CAS服务部署**:将CAS的WAR文件部署到Tomcat的`webapps`目录下。 2. **配置CAS服务器**:在`cas-server-config.xml`中设置CAS服务器的相关属性,如认证处理器、服务验证策略等。 3. **调整内存设置**:根据系统...

    我的CAS配置及测试过程

    3. **部署CAS服务器**:将CAS服务器打包为WAR文件,部署到应用服务器(如Tomcat)中。 4. **客户端配置**:在每个需要SSO功能的应用中,配置CAS客户端库。这通常涉及修改web.xml,添加必要的过滤器和监听器。 在...

    CAS单点登录配置全过程

    ### CAS单点登录配置全过程详解 #### 一、前言 CAS(Central Authentication Service)是一种开放源代码的单点登录(Single Sign-On, SSO)协议和服务...希望本篇文章能帮助读者更好地理解和实践CAS单点登录技术。

    关于CAS开源单点登录的点点滴滴

    虽然描述信息为空,但我们可以从给定的标签和资源中推断,这篇博文可能涉及了对CAS的源码分析和在Tomcat服务器上的实际部署与使用。博主可能分享了如何配置CAS服务器和客户端,以及在实际项目中遇到的问题和解决方案...

    CAS工程导入eclipse无需mavenJava版本server

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,它允许用户通过...希望这篇文章对那些不想使用Maven的朋友有所帮助,让他们能够顺利地在Eclipse环境中启动和运行CAS服务。

    Tomcat 同一服务器上 不同web项目共享session的

    本篇文章将深入探讨如何在Tomcat服务器上实现在不同Web项目之间共享session。 首先,理解session的基本概念是关键。Session是在服务器端保存用户状态的一种机制,它通过在客户端(浏览器)存储一个唯一的session ID...

    liferayPortal

    - Single Sign-On (SSO):通过Yale CAS和Siteminder等提供单点登录功能。 - Hierarchical and Extensible系统:支持社区和组织的层次结构和扩展。 - Mule or ServiceMix ESB:支持企业服务总线集成。 #### 八、性能...

    java获取数字证书信息

    在部署了Tomcat SSL服务后,可能会遇到CAS验证问题,如`CASSSO`出现错误“`edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate Proxy Ticket Validator`”。此时,我们需要将自签名的证书...

Global site tag (gtag.js) - Google Analytics