cas配置单点登录

标签: cas 登录 | 发表时间:2014-03-17 17:03 | 作者:一米天空
出处:http://www.iteye.com

        最近一段时间研究的cas,不知道是什么原因,可能自己最近太浮躁了,没有沉下心来去研究,所以一直拖着,将近拖了一周半的时间,上周的周总结,确保一定要解决的问题,今天还是横下心来,处理完这个问题,我是一个对于技术痴迷的人,对于现在研究出来这个结果非常高兴,与大家分享一下:

       注明:本文所讲的至少怎么配置,但是具体的原理和细节会在稍后的时间里更新给大家,如有不对的地方希望大家指出来,共同学习和探讨一下

        配置步骤:

         在网上搜索这个内容铺天盖地的都是,但是根据步骤来出现各种各样的问题,现在我把我实现方式与大家分享,废话又是一堆,我们进入正题:

          1.下载路径:服务器端的文件任何版本都可以:  http://downloads.jasig.org/cas/

                               客户端的文件任何版本都可以 : http://downloads.jasig.org/cas-clients/

                             我建议下载最高版本。

 

          2. 我下载的cas-server-3.5.2-release.zip这个,然后解压,将解压后文件中modules下的war后缀的文件重命名为cas然后放到tomcat的webapp下,然后启动tomcat,会发现有webapp下多了一个文件夹cas然后我们进行配置cas下的deployerConfigContext.xml这个文件

 

          3.配置deployerConfigContext.xml该文件

               1>配置数据源

<bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName">
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="url">
    <value>jdbc:mysql://localhost:3306/test</value>
  </property>
  <property name="username">
    <value>root</value>
  </property>
  <property name="password">
    <value>123</value>
  </property>
</bean>

    然后在你的数据库中新建一张表和下面的sql对应上就可以,然后进行验证。           

          2> 因为你新增用户或者修改用户密码时都会对密码进行加密(我没有测试,你们可以测试一下)

         <bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" p:characterEncoding="UTF-8"> <constructor-arg index="0" value="MD5"/> </bean>

PasswordEncoder用来将用户登录时提供的密码进行编码,这样才能跟数据库中已经编码的用户密码进行比较. 下面是使用MD5加密用户密码为例

                 3>处理当你走单点登录时,进行用户校验

       

<property name="authenticationHandlers">
  <list>
    <!--利用上面配置的dataSource与passwordEncoder来验证用户合法性-->
    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
      <property ref="casDataSource" name="dataSource"/>
      <property ref="passwordEncoder" name="passwordEncoder"/>
      <property name="sql">
        <value>select password from user where name = ?</value>
      </property>
    </bean>
    <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient"/>
    <!--这是一个简单的测试用的AuthenticationHandler, 当用户输入的用户名与密码相同时,则验证通过,实际使用中要注释掉-->
    <!--<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"/>-->
  </list>
</property>

  

            4.添加jar包到cas的WEB-INFO下的lib中

     驱动jar根据你链接的数据库相应的添加

  • cas-server-support-jdbc-3.4.10.jar(在解压后的cas-server-release包的modules文件夹下)
  • commons-collections.jar
  • commons-dbcp.jar
  • commons-pool.jar

               到此位置cas算是配置完成,我们进行ssl的设置,我出问题就是在给地方卡壳了。

 

           5.ssl证书的生成

                1> 生成证书:keytool -genkey -alias  smalllove -keyalg RSA -keystore D:/keys/smallkey

                      注意里面的姓氏是你的域名不是乱起的,如果没有包名自己新建一下

                 2>导入证书:keytool -export -file d:/keys/small.crt -alias smalllove -keystore d:/keys/smallkey

                 3>把证书导入到客户端JDK中:keytool -import -keystore C:\Java\jdk1.6.0_21\lib\security\cacerts -file D:/keys/small.crt -alias smalllove

                    注意该步骤可能存在的问题是如果你的jdk安装在program files中的话会没有办法导入,报错,你可以将cacerts生成文件可以在任何目录生成,然后将生成的cacerts文件手动放到jdk指定的目录中

 

            6.配置tomcat中conf文件下的server.xml

            <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
      keystoreFile="D:/keys/smallkey"       keystorePass="smalllove"/>       <!--在2.1中设置的密码-->

         

            7.   构建项目添加jar包

              新建一个web项目,将其放到tomcat下,然后将cas-client文件夹中modules下cas-client-core-3.2.1.jar放到你新建的web项目的lib下

 

           8.配置新建web项目的web.xml文件

               <!-- ======================== 单点登录开始 ======================== -->
 <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
 <listener>
  <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
 </listener>

 <!-- 该过滤器用于实现单点登出功能,可选配置。 -->
 <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>

 <!-- 该过滤器负责用户的认证工作,必须启用它 -->
 <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>https://www.travel.com:8443/cas/login</param-value>
   <!--这里的server是服务端的IP -->
  </init-param>
  <init-param>
   <param-name>serverName</param-name>
   <param-value>http://www.travel.com:8080</param-value  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>CASFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
 <filter>
  <filter-name>CAS Validation Filter</filter-name>
  <filter-class>
   org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
  <init-param>
   <param-name>casServerUrlPrefix</param-name>
   <param-value>https://www.travel.com:8443/cas</param-value>
  </init-param>
  <init-param>
   <param-name>serverName</param-name>
   <param-value>http://www.travel.com:8080</param-value>   </init-param>
 </filter>
 <filter-mapping>
  <filter-name>CAS Validation Filter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
 <filter>
  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
  <filter-class>
   org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->
 <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 Assertion Thread Local Filter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <!-- ======================== 单点登录结束 ======================== -->

    

上面的所有的东西配置完成你可以在浏览器中用 https://localhost:8443/project ”  , 进行访问就可以得到你想要的预期的结果。

 

 

                                   

     



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [cas 登录] 推荐:

cas配置单点登录

- - 开源软件 - ITeye博客
        最近一段时间研究的cas,不知道是什么原因,可能自己最近太浮躁了,没有沉下心来去研究,所以一直拖着,将近拖了一周半的时间,上周的周总结,确保一定要解决的问题,今天还是横下心来,处理完这个问题,我是一个对于技术痴迷的人,对于现在研究出来这个结果非常高兴,与大家分享一下:.        注明:本文所讲的至少怎么配置,但是具体的原理和细节会在稍后的时间里更新给大家,如有不对的地方希望大家指出来,共同学习和探讨一下.

CAS解决单点登录SSO

- - CSDN博客推荐文章
关于CAS很多的原理和基础的配置启动,网上是很多的,我更多是结合我的实践和心得. 需要了解CAS的原理,认证协议,认证流程,可以参考以下文章. 让CAS支持客户端自定义登陆页面——客户端篇. CAS原理与配置-基于CAS的单点登陆的研究(上). 单点登录(SSO)是企业开发的重要问题,在我的毕设项目中,由于要和系统其他开发模块共用用户认证模块,方便共享用户资源,所以需要一个好的SSO解决方案.

CAS 4.0 单点登录教程

- - ITeye博客
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一. SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 耶鲁大学(yale)开发的单点登录(Single Sign On)系统称为CAS(Central Authentication Service)被设计成一个独立的Web应用程序(cas.war).

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

- - 互联网 - ITeye博客
CAS单点登录(SSO)完整教程(2012-02-01更新). 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤. 单点登录(SSO):请看百科解释. 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server),. CAS Server版本:cas-server-3.4.3.1、cas-server-3.4.10.

CAS实现SSO单点登录原理

- - 非技术 - ITeye博客
CAS实现SSO单点登录原理. CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ). CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目.

基于CAS实现单点登录(SSO):cas client端的退出问题

- - CSDN博客架构设计推荐文章
自从CAS 3.4就很好的支持了单点注销功能,配置也很简单. 之前版本因为在CAS服务器通过HttpClient发送消息时并未指定为POST方式,所以在CAS客户端的注销Filter中没有收到POST请求(要知道Filter只对Post请求起作用),也就没有做session销毁处理. 两个业务系统APP1和APP2.

SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)

- - CSDN博客互联网推荐文章
电商平台中无论是前端还是后端会存在大量的业务应用,在整个交易的过程中请求是在各个业务应用中流转的,对于用户来讲只需要登录一次就可以访问所有的业务,这就是单点登录SSO. 单点登录开源有很多的解决方案,比如基于session的SSO和基于cookie的SSO. 业界使用比较多的基于session的SSO的开源解决方案比如CAS,流程示意图如下:.

[原]CAS原理分析

- -
1、悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作. 悲观锁的实现,往往依靠底层提供的锁机制;悲观锁会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁. 2、乐观锁:假设不会发生并发冲突,每次不加锁而是假设没有冲突而去完成某项操作,只在提交操作时检查是否违反数据完整性. 如果因为冲突失败就重试,直到成功为止.

shiro-cas 单点退出

- - 互联网 - ITeye博客
shiro与CAS集成以后的单点退出. 效果任何一个应用退出以后 所有应用都要重新登录. 实现思路shiro退出系统以后重新定向到cas的退出. 1.重新配置shiro的登出跳转.   shiro退出以后跳转到cas的退出.   cas退出以后通过service参数跳转回应用界面. 2.覆盖shiro的默认退出实现 .

CAS和Shiro在spring中集成

- - CSDN博客架构设计推荐文章
shiro是权限管理框架,现在已经会利用它如何控制权限. 为了能够为多个系统提供统一认证入口,又研究了单点登录框架cas. 因为二者都会涉及到对session的管理,所以需要进行集成. Shiro在1.2.0的时候提供了对cas的集成. 因此在项目中添加shiro-cas的依赖. Shiro对cas集成后,cas client的配置更加简单了.