CAS学习

                         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

你可能感兴趣的:(tomcat,mysql,bean,Web,配置管理)