`
xiaoxin5230
  • 浏览: 88773 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

CAS学习

    博客分类:
  • j2ee
阅读更多

                         CAS学习

背景:wap调查和webdiscuz用户属于两个不同的用户体系,为了方便用户的注册,所以,需要将两者的数据进行统一管理,于是单点登录cas出现在我们的面前。

Cas介绍:CAS(Central Authentication Service) Yale 大学发起的一个开源项目。 从结构体系看, CAS 包含两部分:

1、                       CAS Server CAS Server 负责完成对用户的认证工作, CAS Server 需要独立部署,有不止一种 CAS Server 的实现

2、                       CAS client 负责部署在客户端,CAS Client 支持非常多的客户端,包括 Java .Net ISAPI Php Perl uPortal Acegi Ruby VBScript 等客户端,几乎可以这样说, CAS 协议能够适合任何语言编写的客户端应用

Cas 服务器端:版本:cas-server-3.3.1

         开发步骤:

1.解压cas-server-3.3.1,进入modules中,解压cas-server-webapp-3.3.1,把名称改成cas,放入tomcat webapp中,运行tomcat,访问http://localhost:8080/cas/login  如果出现登录页面,用户名和密码填写相同则验证通过。此时你的cas服务器则配置成功。

 2.服务器的登录不能这么简单,所以需要将登录和数据库中的数据进行结合。所以需要在cas服务器端配置数据库。配置过程如下:

1)打开cas\WEB-INF\deployerConfigContext.xml 文件。找到

1.     <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />  将其替换成

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

3.                                 <property name="sql" value="select password from app_user where lower(username)=lower(?)"/>              

4.                                                <property name="dataSource">

5.                                                       <ref local="DateSource"/>

6.                                                </property>  

7.     </bean>

然后需要配置 DateSource

8.       <bean id="DateSource" class="org.apache.commons.dbcp.BasicDataSource">

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

10.                                       <property name="url" value="jdbc:mysql://localhost:3306/test"/>

11.                                       <property name="username" value="root" />

12.                                       <property name="password" value="123" />

13.                                       <property name="maxActive" value="20"/>

14.                                       <property name="maxIdle" value="20"/>

15.                                       <property name="maxWait" value="20"/>  

16.      </bean>

   说明:此处是连接的test数据库,然后使用的是app_user表。数据库使用的是mysql

   所以需要添加额外的包进来:commons-dbcp-1.2.2.jarcommons-pool-1.4.jarmysql-connector-java-5.0.0-beta-bin.jarspring.jar

此时在运行cas,基本上就ok了。

 3.cas需要加入安全证书。所以需要使用keytool生成证书导入到jvm中。

生成步骤:

       1,生成数字证书

         keytool -genkey -alias tomcatcas -keypass changeit -keyalg RSA -keystore tomcatcas keystore
     
    2
,导出数字证书

         keytool -export -alias tomcatcas -keypass changeit -file server.crt -keystore tomcatcas.keystore

    3
,将数字证书导入jre的可信区

          keytool -import -alias tomcatcas -file server.crt -keypass changeit -keystore ../jre/lib/security/cacerts

   4.查看是否已经导入

keytool -list -keystore ../jre/lib/security/cacerts

5.keytool 参数说明

-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias
产生别名
-keystore
指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg
指定密钥的算法 
-validity
指定创建的证书有效期多少天
-keysize
指定密钥长度
-storepass
指定密钥库的密码
-keypass
指定别名条目的密码
-dname
指定证书拥有者信息例如: "CN=firstName,OU=org,O=bj,L=bj,ST=gd,C=cn"
-list
显示密钥库中的证书信息 keytool -list -v -keystore 别名 -storepass ....
-v
显示密钥库中的证书详细信息
-export
将别名指定的证书导出到文件 keytool -export -alias 别名 -file 文件名.crt
-file
参数指定导出到文件的文件名
-delete
删除密钥库中某条目 keytool -delete -alias 别名 -keystore sage
-keypasswd
修改密钥库中指定条目口令 keytool -keypasswd -alias 别名 -keypass .... -new .... -storepass ... -keystore 别名
-import
将已签名数字证书导入密钥库 keytool -import -alias 别名 -keystore 证书名-file 文件名(可以加.crt 后缀)

配置tomcat:

  打开tomcat/conf/server.xml,找到8443,改成如下配置

Xml代码 

17.   <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

18.                  maxThreads="150" scheme="https" secure="true"

19.                  clientAuth="false" sslProtocol="TLS"

20.                 keystoreFile="D:\Program Files\Java\jre6\lib\security\tomcatcas.keystore"

21.                  keystorePass="changeit"

22.                 truststoreFile="D:\Program Files\Java\jre6\lib\security\cacerts"

23.                 truststorePass="changeit"                        

24.      />  

以上就是配置了一个完整的cas服务器。Cas登录都是跳到统一的登录页面,cas不支持客户端远程登录,所以需要修改cas的代码让其支持客户端登录:

支持客户端登录步骤:

1.修改cas/WEB-INF/web.xml,为cas增加一个/remoteLogin的映射:

25.   <servlet-mapping>
    <servlet-name>cas</servlet-name>
    <url-pattern>/remoteLogin</url-pattern>

26.   </servlet-mapping>

2.然后修改cas/cas-servlet.xml文件,增加我们对/remoteLogin映射的处理,需要增加一个新流程:

找到<prop key="/login">loginController</prop> 在后面加上

27.   <prop key="/remoteLogin">remoteLoginController</prop>

3.然后在cas-servlet.xml文件中添加我们上面所配置的remoteControllerbean

<!-- 增加远程控制者,允许以/remote请求启动remote控制流程 -->
<bean id="remoteLoginController" 
    class="org.springframework.webflow.executor.mvc.FlowController"
    p:flowExecutor-ref="remoteLoginFlowExecutor"
    p:defaultFlowId="remoteLogin-webflow">
    <property name="argumentHandler">
        <bean class="org.springframework.webflow.executor.support.RequestParameterFlowExecutorArgumentHandler"
            p:flowExecutionKeyArgumentName="lt"
            p:defaultFlowId="remoteLogin-webflow" />
    </property>
</bean>
<flow:executor id="remoteLoginFlowExecutor" registry-ref="remoteLoginFlowRegistry">
    <flow:execution-attributes>
        <flow:alwaysRedirectOnPause value="false"/>
    </flow:execution-attributes>
</flow:executor>
<flow:registry id="remoteLoginFlowRegistry">
    <flow:location path="/WEB-INF/remoteLogin-webflow.xml"/>
</flow:registry>

4.可以看到上面将请求指向了webflow配置文件/WEB-INF/remoteLogin-webflow.xml文件,我们需要创建此文件并配置其成为我们所需的流程,根据原login-webflow.xml文件修改,修改文件见附件。可以看到,我们在流程中增加了remoteLogin Action节点和remoteCallback View节点

 

5.下面我们配置remoteLogin节点:
/WEB-INF/cas-servlet.xml文件中增加remoteLoginAction配置:

<bean id="remoteLoginAction"
    class="com.ttpod.cas.web.flow.RemoteLoginAction"
    p:argumentExtractors-ref="argumentExtractors"
    p:warnCookieGenerator-ref="warnCookieGenerator"
    p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator" />

同时创建com.ttpod.cas.web.flow.RemoteLoginAction类:见附件

6.修改cas\WEB-INF\classes\default_views.properties文件,增加remoteCallbackView配置:

### 配置远程回调页面
remoteCallbackView.(class)=org.springframework.web.servlet.view.JstlView
remoteCallbackView.url=/WEB-INF/view/jsp/default/ui/remoteCallbackView.jsp

7.创建/WEB-INF/view/jsp/default/ui/remoteCallbackView.jsp文件:

详情见附件

至此cas服务器配置已经告一段落,下面是让java客户端支持支持cas服务器

Cas java客户端:版本:3.1.3

开发步骤在web.xml中加入

  <!--单点退出配置 一定要放在前面-->

 

28.        <filter>

29.           <filter-name>CAS Single Sign Out Filter</filter-name>

30.           <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>

31.       </filter>   

    <!--单点登录配置--> 

32.       <filter-mapping>

33.           <filter-name>CAS Single Sign Out Filter</filter-name>

34.           <url-pattern>/*</url-pattern>

35.       </filter-mapping>

36.    

37.     <filter>

38.           <filter-name>CAS Authentication Filter</filter-name>

39.           <!--<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>-->

40.           <filter-class>com.ttpod.bbs.com.view.filter.RemoteAuthenticationFilter</filter-class>

41.           <!-- 配置客户单登录 配置你的登录页面-->

42.           <init-param>

43.                  <param-name>localLoginUrl</param-name>

44.                  <param-value>http://192.168.1.2:8080/ttpodbbs/head/login.jsp

45.                  </param-value>

46.           </init-param>

47.           <!-- CAS login 服务地址-->

48.           <init-param>

49.                  <param-name>casServerLoginUrl</param-name>

50.                  <param-value>https://192.168.1.2:8443/cas/login</param-value>

51.           </init-param>

52.           <init-param>

53.                  <param-name>renew</param-name>

54.                  <param-value>false</param-value>

55.           </init-param>

56.           <init-param>

57.                  <param-name>gateway</param-name>

58.                  <param-value>false</param-value>

59.           </init-param>

60.           <!-- 客户端应用服务地址-->

61.           <init-param>

62.                  <param-name>serverName</param-name>

63.                  <param-value>http://192.168.1.2:8080</param-value>

64.           </init-param>

65.     </filter>

66.     <!--负责Ticket校验-->

67.     <filter>

68.           <filter-name>CAS Validation Filter</filter-name>

69.           <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>

70.           <init-param>

71.                  <param-name>casServerUrlPrefix</param-name>

72.                 

分享到:
评论
3 楼 xiaoxin5230 2013-10-15  
leyou 写道
请问你知道CAS3.5是怎么实现自定义登录页面的吗?CAS3.5使用了spring web flow 2 ,所以您文章中的配置不能用了,但是新的不知道该怎么配置,请问你知道吗?

这个是3年前用的,现在都快忘记了
2 楼 leyou 2013-10-08  
请问你知道CAS3.5是怎么实现自定义登录页面的吗?CAS3.5使用了spring web flow 2 ,所以您文章中的配置不能用了,但是新的不知道该怎么配置,请问你知道吗?
1 楼 01jiangwei01 2012-03-01  
你好,我没有找到org.springframework.webflow.executor.support.RequestParameterFlowExecutorArgumentHandler,帮忙传一个jar

相关推荐

    单点登录-cas学习项目源码

    在这个"单点登录-cas学习项目源码"中,我们可以深入理解CAS如何工作以及如何在实际项目中集成和配置。主要包含以下几个关键知识点: 1. CAS服务器配置:CAS服务器是整个SSO系统的中心,负责处理用户的登录请求和...

    CAS学习手册-JAVA程序员必备

    【CAS学习手册-JAVA程序员必备】 在多线程编程中,确保数据的正确性和一致性是一项挑战。CAS(Compare And Swap)是一种无锁算法,对于JAVA程序员来说,理解并掌握它是提高程序性能的关键。CAS机制通过比较内存地址...

    H3C CAS总结.zip

    综上所述,这个压缩包是一份全面的H3C CAS学习资源,涵盖了从基础配置到高级应用的多个层面,无论是对新手还是资深管理员,都能从中获益。通过深入研究和实践这些材料,用户能够熟练掌握H3C CAS的使用,为企业构建和...

    CAS 开发综合笔记

    4. **JA-SIG CAS学习笔记**: "JA-SIG(CAS)学习笔记2"和"JA-SIG(CAS)学习笔记3"涵盖了CAS的基本概念、架构和配置,以及如何与Java应用集成。JA-SIG是一个高等教育软件联盟,其文档对于理解CAS的教育背景和应用...

    cas_project.zip

    总的来说,"cas_project.zip"提供了一个完整的CAS学习和实践平台,涵盖了从基础架构到高级定制的多个层次。通过深入研究源代码、配置文档和示例,开发者不仅可以掌握CAS的基本工作原理,还能学会如何根据需求进行...

    cas sso学习心得

    【CAS SSO学习心得】 CAS(Central Authentication Service)是一种广泛使用的单点登录(Single Sign-On,简称SSO)框架,主要由Java编写。在本文中,我们将深入探讨如何配置CAS服务器以及客户端,以便实现单点登录...

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录...通过学习和实践,你可以掌握CAS的核心概念,实现自定义认证策略,以及优化客户端集成,从而为你的项目构建一个强大而安全的单点登录系统。

    华三(H3C)CAS指导学习安装教程.pdf

    华三(H3C)CAS云计算管理平台 华三(H3C)CAS是华三公司推出的云计算管理平台,旨在为数据中心云计算基础架构提供业界领先的虚拟化管理解决方案。该平台实现对数据中心云计算环境的集中管理和控制,通过单一的管理界面...

    cas修改登录页

    【标题】"CAS修改登录页"是一个针对中央认证服务...通过这个项目,你不仅能够学习到如何自定义CAS登录页面,还能深化对SSO系统、Web开发以及相关安全实践的理解。在实践中不断探索和学习,将使你在这个领域更加专业。

    CAS单点登录学习笔记五之CAS服务器数据源

    本篇学习笔记主要聚焦于CAS服务器的数据源配置,这对于理解CAS如何存储和管理用户认证信息至关重要。在CAS的运行中,数据源作为连接数据库的关键组件,用于存储和检索用户凭证、服务定义等信息。 首先,我们需要...

    cas自定义登录页面

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议...如果你希望对CAS有更深入的理解或进行更复杂的定制,可以学习相关的文档,或者查阅源代码,以便更好地适应你的业务需求。

    机器学习方法在CRISPR_Cas9系统中的应用.pdf

    近年来,机器学习作为一种强大的数据分析工具,已经被用来解决这些问题,并在优化CRISPR/Cas9系统的性能上取得了显著进展。 CRISPR/Cas9的工作原理主要依赖于sgRNA(single-guide RNA),它是由CRISPR RNA和...

    cas官方文档

    CAS(Central Authentication Service)是Apereo基金会开源的一款集中式身份验证服务,主要目的是提供单一登录(Single ...通过深入学习这些文档,开发者可以有效地集成和管理CAS,实现安全、高效的单点登录解决方案。

    H3C CAS云计算软件套件《H3C CAS七日通》.rar

    《H3C CAS七日通》是一份针对H3C云计算软件套件——H3C Cloud Automation System (简称H3C CAS) 的详尽学习资料,旨在帮助用户在一周内快速掌握该系统的使用和管理。这份资料包含了有声讲解版,以音频形式辅助理解,...

    cas-3.4.1_单点登录_CAS_

    在使用和学习CAS时,你需要了解JSP、Servlet、Spring框架等基础知识,因为CAS是基于这些技术构建的。同时,熟悉Maven或Gradle等构建工具也有助于管理和构建项目。如果你计划在生产环境中部署CAS,还需要考虑如何与...

    单点登录cas-overlay-template-5.3编译后的cas.war

    cas6.x需要使用jdk11版本,目前cas5.3.15.1是8的最高版本,但是稳定性cas-5.3.14.war最佳,本次基于jdk8-201编译

    struts2+cas单点登陆例子

    Struts2和CAS单点登录(SSO)的集成是一个常见的Web应用安全实践,它允许用户在一个系统...通过这个简单的示例,开发者可以学习如何在自己的项目中实施SSO,提高用户的安全体验,同时减少管理多个认证系统的复杂度。

Global site tag (gtag.js) - Google Analytics