前言

此文为记录单点登录实现过程,包括cas服务端和客户端的定制扩展

服务端

单点登录服务端采用cas,以cas-server-webapp版本号为3.5.2.1为基础进行定制扩展实现。

定制实现的源码功能以上传至svn代码库,路径为:svn://192.168.9.16/minxin/Repositories/minxinloan/trunk/mxcas-server-webapp。

此版本的定制扩展实现采用http协议(关闭了https协议),下面对此版的定制扩展进行详细的描述。

  1. 关闭https协议:

    • 修改deployerConfigContext.xml中的“<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false"/>”,将p:requireSecure="false"属性值设置为“false”;
    • 修改ticketGrantingTicketCookieGenerator.xml中的<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" />,将p:cookieSecure="false" 属性值设置为“false”。
  2. 数据库用户名密码验证
    • 在deployerConfigContext.xml配置文件中添加数据源配置:
      <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName">
            <value>java:comp/env/jdbc/minxinDataSource</value>
            </property>
      </bean>
    • 添加com.minxinloan.cas.server.MxloanPasswordEncoder类,实现定制密码加密器。
    • 在deployerConfigContext.xml配置文件中添加<bean id="mxPasswordEncoder" class="com.minxinloan.cas.server.MxloanPasswordEncoder"/>配置。
    • 在deployerConfigContext.xml配置文件中将<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />替换为:

      <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
              <property name="dataSource" ref="dataSource"></property>
              <property name="sql" value="select t.password from uc_employee t where t.login_name=? and t.status=1"></property>
              <property name="passwordEncoder" ref="mxPasswordEncoder"></property>
      </bean>

  3. 定制登录用户信息属性
    • 添加com.minxinloan.cas.server.MxloanPersonAttributeDao类,实现通过查询数据库构建登录人的信息。
    • 在deployerConfigContext.xml配置文件中将

    <bean id="attributeRepository" class="org.jasig.services.persondir.support.StubPersonAttributeDao">
             <property name="backingMap">
                 <map>
                        <entry key="uid" value="uid" />
                        <entry key="eduPersonAffiliation" value="eduPersonAffiliation" />
                        <entry key="groupMembership" value="groupMembership" />
               </map>
             </property>
    </bean>

    替换为:

    <bean id="attributeRepository" class="com.minxinloan.cas.server.MxloanPersonAttributeDao">
               <property name="dataSource" ref="dataSource"/>
    </bean>

    • 在/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp文件中添加
      <cas:attributes>
             <c:forEach items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}" var="attr">
                    <cas:${attr.key}>${attr.value}</cas:${attr.key}>
            </c:forEach>
      </cas:attributes>
  4. 登出支持重定向
    • 将cas.properties文件中的cas.logout.followServiceRedirects=true注释放开。
  5. 定制登录页面
    • 修改/view/jsp/default/ui/casLoginView.jsp页面(暂时未修改定制)

客户端

    1. 添加com.minxinloan.web.utils.WebUtils类。
    2. 添加com.minxinloan.web.utils.CasSessionUserFilter类,处理单点登录返回的用户信息,并保存至session中。
    3. 在客户端web应用中的web.xml添加如下内容,其中filter的映射地址路径根据实际情况进行设置。

      <listener>
      <listener-class>
      org.jasig.cas.client.session.SingleSignOutHttpSessionListener
      </listener-class>
      </listener>
      <filter>
      <filter-name>CasSingleSignOutFilter</filter-name>
      <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>CasSingleSignOutFilter</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter>
      <filter-name>CASFilter</filter-name>
      <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
      <init-param>
      <param-name>casServerLoginUrl</param-name>
      <param-value>http://localhost:8088/cas/login</param-value> <!-- 此地址为cas登录url-->
      </init-param>
      <init-param>
      <param-name>serverName</param-name>
      <param-value>http://localhost:8080</param-value>
      </init-param>
      </filter>
      <filter-mapping>
      <filter-name>CASFilter</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter>
      <filter-name>CasTicketFilter</filter-name>
      <filter-class>
      org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
      </filter-class>
      <init-param>
      <param-name>casServerUrlPrefix</param-name>
      <param-value>http://localhost:8088/cas</param-value>
      </init-param>
      <init-param>
      <param-name>serverName</param-name>
      <param-value>http://localhost:8080</param-value>
      </init-param>
      <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>  <!--处理中文乱码问题-->
      </init-param>
      </filter>
      <filter-mapping>
      <filter-name>CasTicketFilter</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter>
      <filter-name>CasRequestWrapFilter</filter-name>
      <filter-class>
      org.jasig.cas.client.util.HttpServletRequestWrapperFilter
      </filter-class>
      </filter>
      <filter-mapping>
      <filter-name>CasRequestWrapFilter</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter>
      <filter-name>AssertionThreadLocalFilter</filter-name>
      <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>AssertionThreadLocalFilter</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter-name>CasSessionUserFilter</filter-name>
      <filter-class>com.minxinloan.web.utils.CasSessionUserFilter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>CasSessionUserFilter</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>

    4. 退出登录直接访问url地址http://localhost:8088/cas/logout,也可以在此url后面加上service参数指定重定向地址,例如http://localhost:8088/cas/logout?service=http://localhost:8080/foo。

cas单点登录实现的更多相关文章

  1. SSO之CAS单点登录实例演示

    本文目录: 一.概述 二.演示环境 三.JDK安装配置 四.安全证书配置 五.部署CAS-Server相关的Tomcat 六.部署CAS-Client相关的Tomcat 七. 测试验证SSO 一.概述 ...

  2. cas 单点登录出现org.jasig.cas.client.util.CommonUtils.getResponseFromServer - 拒绝连接 Connection refused

    cas 单点登录出现org.jasig.cas.client.util.CommonUtils.getResponseFromServer - 拒绝连接 Connection refused 环境: ...

  3. CAS单点登录中文用户名乱码问题

    CAS单点登录中文用户名乱码问题,有两种情况 1. CAS server乱码 即在向server端提交用户名和密码时,发生了乱码,解决方法是: 打开WEB-INF/web.xml,在其它的Filter ...

  4. CAS单点登录系统整合——注册的问题

    最近一段时间在搞CAS单点登录系统,涉及到几个子系统的整合问题.对于注册,这里遇到了一个选择: 在子系统内完成注册,然后把信息同步到CAS系统: 在CAS系统中完成基本信息的注册,比如:用户名.邮箱. ...

  5. Asp.net Mvc4 使用Cas单点登录

    因项目需要,使用了耶鲁大学的Cas单点登录方案,在java中使用一直正常,但是在.Net中碰到了循环重定向的问题,反复测试后,总算解决了,最终的配置如下: <?xml version=" ...

  6. CAS单点登录之mysql数据库用户验证及常见问题

    前面已经介绍了CAS服务器的搭建,详情见:搭建CAS单点登录服务器.然而前面只是简单地介绍了服务器的搭建,其验证方式是原始的配置文件的方式,这显然不能满足日常的需求.下面介绍下通过mysql数据库认证 ...

  7. SSO之CAS单点登录详细搭建教程

    本教程是我个人编写,花费几个小时的时间,给需要学习的人员学习使用,希望能帮助到你们. [环境说明]:本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows7 ...

  8. CAS单点登录配置[1]:准备工作

    关于CAS是什么这里就不在赘述,网友将它比喻成旅游景点的套票,买了一个套票就可以观看所有景点,不需要一个景点买一次票...我们重点介绍CAS单点登录的配置. 工具/原料 1.配置好JDK环境,否则不方 ...

  9. cas系列(一)--cas单点登录基本原理

    (这段时间打算做单点登录,因此研究了一些cas资料并作为一个系列记录下来,一来可能会帮助一些人,二来对我自己所学知识也是一个巩固.) 一.为什么要实现单点登录 随着信息化不断发展,企业的信息化过程是一 ...

  10. CAS单点登录(SSO)完整教程

    转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...

随机推荐

  1. 图-图的表示、搜索算法及其Java实现

    1.图的表示方法 图:G=(V,E),V代表节点,E代表边. 图有两种表示方法:邻接链表和邻接矩阵 邻接链表因为在表示稀疏图(边的条数|E|远远小于|V|²的图)时非常紧凑而成为通常的选择. 如果需要 ...

  2. PAT甲题题解-1110. Complete Binary Tree (25)-(判断是否为完全二叉树)

    题意:判断一个节点为n的二叉树是否为完全二叉树.Yes输出完全二叉树的最后一个节点,No输出根节点. 建树,然后分别将该树与节点树为n的二叉树相比较,统计对应的节点个数,如果为n,则为完全二叉树,否则 ...

  3. Vim操作指南

    vim具有6种基本模式和5种派生模式. 基本模式 普通模式 插入模式 可视模式 选择模式 命令行模式 Ex模式 派生模式 操作符等待模式 插入普通模式 插入可视模式 插入选择模式 替换模式 1.移动光 ...

  4. mysql 访问不是本地数据库,给用户刷新了权限没有作用

    1.grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option; flus ...

  5. 实训三(cocos2dx 3.x 打包apk)

    上一篇文章<实训二(cocos2dx 2.x 打包apk)>简单的讲述的利用cocos2dx 2.x引擎在windows平台上打包apk的方法与过程,本文将介绍3.x版本引擎,如何打包ap ...

  6. 第二个Sprint ------第四、五、六、七天

    27号.28号.29号有事回家,没能及时更新博客. 罗伟业:加减算术----乘除算式   返回一个完整正确(加减.乘除)的算式<考虑到低年级还没有完全掌握四则混合运算> 康取:四则混合运算 ...

  7. MyEclipse同时配置多个tomcat

    步骤: 1.可以把原有tomcat复制一份,或者下载新的tomcat,如果有必要的话,修改/conf/service.xml文件中tomcat的端口号,避免端口同时暂用出现错误 2.请看一下图片:打开 ...

  8. JavaMail实现邮箱之间发送邮件功能

    package com.minstone.message.util; import java.util.Date; import java.util.Properties; import javax. ...

  9. 随web应用启动而自启动的后台线程

    当前遇到一个需求: 需要在web应用启动的时候就启动一个线程定时的来做某项工作. 有两种解决方法: 1.增加一个监听器Listener来实现相关功能. 2.增加一个随项目启动的servlet来实现相关 ...

  10. UOJ#424 【集训队作业2018】count

    题意 我们定义长度为\(n\),每个数为\(1\sim m\)之间的整数且\(1\sim m\)都至少出现一次的序列为合法序列.再定义\(pos(l,r)\)表示这个序列的区间\([l,r]\)之间的 ...