[计算机软件及应用]CAS配置指南_第1页
[计算机软件及应用]CAS配置指南_第2页
[计算机软件及应用]CAS配置指南_第3页
[计算机软件及应用]CAS配置指南_第4页
[计算机软件及应用]CAS配置指南_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.1 准备工具cas-server-3.5.1-release.zip/cas/cas-client-3.2.1-release.zip/cas-clients/2 CAS验证服务器配置1、解压cas-server-3.5.1-release.zip到磁盘,进入modules文件夹下,把cas-server-webapp-3.5.1.war拷贝到Tomcat安装目录的webapps文件夹下。为了方便在浏览器中浏览,把cas-server-webapp-3.5.1.war文件名修改为cas.war

2、。2、运行Tomcat。在浏览器中输入http:/localhost:8080/cas,显示登录界面。输入用户名和密码(用户名和密码相等即可),登录成功。这样最简单的CAS验证服务器搭配成功。图1 Modules文件夹截图图2 SIG-CAS服务端页面3 数据库验证方式3.1 密码已明文存在数据库中1、复制modules下面所有jar包到tomcat webappscasWEB-INFlib下。数据库为Oracle,因此把Oracle驱动包也复制到lib文件夹下。注意删除重复的jar包。Oracle10g.jar 及 spring-jdbc.jar。2、打开D:apache-tomcat-6.

3、0.30webappscasWEB-INFdeployerConfigContext.xml文件,在<bean id="authenticationManager"节点上面添加数据源信息:<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"><value>oracle.jdbc.driv

4、er.OracleDriver</value></property><property name="url"><value>jdbc:oracle:thin:40:1521:orcl</value></property><property name="username"><value>scott</value></property><property name="password">&

5、lt;value>tiger</value></property></bean>在该文件中搜索“SimpleTestUsernamePasswordAuthenticationHandler”<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />这是cas提供的最简单的验证方式,即用户名和密码相等即可登录成功。现假设我们的登录用户名和密码存在于t_login表

6、中,信息如下:IDUSERNAMEPASSWORD1coolszy123456把上面的bean给注销掉,添加如下信息:<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"><property name="sql"value="select password from t_login where username=?" /><property name="dataSource" ref=&

7、quot;dataSource" /></bean>当然我们还可以指定表和字段。(接着上面的配置文件)<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"abstract="false" lazy-init="default" autowire="default"><property name="dataSource" ref=&

8、quot;dataSource" /><property name="tableUsers" value="t_login" /><property name="fieldUser" value="username" /><property name="fieldPassword" value="password" /></bean>重启服务器,测试。图3 CAS验证成功页面3.2 密码已密文存在数据库中以上的配

9、置只适合密码已明文的方式存储在数据库中,但是实际中我们的密码都是经过加密的。下面演示下如果使用MD5加密密码。首先配置MD5,该配置信息放在数据源配置的下面。<bean id="passwordEncoder"class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"><constructor-arg value="MD5" /></bean>然后修改上面的数据库验证配置,添加密码加密方式,修改后如下:<bean cl

10、ass="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"><property name="sql"value="select password from t_login where username=?" /><property name="dataSource" ref="dataSource" /><property name="passwordEncoder&quo

11、t; ref="passwordEncoder" /></bean>3.3 使用自己编写的加密类上面介绍了密码采用MD5加密的配置方式,下面介绍下如果使用我们自己编写的加密类。1、新建一个Java项目,引入cas-server-core-3.4.5.jar包,2、新建一个Java类,实现org.jasig.cas.authentication.handler.PasswordEncoder接口中的public String encode(String arg0)方法,这是用来对输入的密码进行加密,我这里命名为:PasswordEncrypt图4 CAS项目

12、配置3、在encode()方法中可以根据实际的加密方式编写代码。package szy.cas.encrypt;import java.security.MessageDigest;import org.jasig.cas.authentication.handler.PasswordEncoder;public class PasswordEncrypt implements PasswordEncoder public String encode(String password) try MessageDigest alg = MessageDigest.getInstance("

13、;SHA-1");alg.reset();alg.update(password.getBytes();byte hash = alg.digest();String digest = ""for (int i = 0; i < hash.length; i+) int v = hashi & 0xFF;if (v < 16)digest += "0"digest += Integer.toString(v, 16).toUpperCase();return digest; catch (Exception e) e.pri

14、ntStackTrace();return password;编写完毕后,建议进行测试,避免错误发生。然后把该项目导出成jar包,并且把jar包拷贝到D:apache-tomcat-6.0.30webappscasWEB-INFlib下。然后修改上面添加的<bean id="passwordEncoder"class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"><constructor-arg value="MD5" /></

15、bean>把class修改为我们的加密类,即<bean id="passwordEncoder" class="szy.cas.encrypt.PasswordEncrypt"><!- <constructor-arg value="MD5"/> -></bean>测试,成功。4 修改界面4.1 修改验证通过后显示提示信息的界面修改D:apache-tomcat-6.0.30webappscasWEB-INFviewjspdefaultuicasGenericSuccess.jsp

16、页面,添加如下内容调转到指定页面<%response.sendRedirect("39:8080/client/index.action");%>4.2 定义自己的验证界面cas给我们提供了一个“default”界面,该界面比较简单,而且也不怎么漂亮,因此我们需要定制自己的验证界面。下面介绍一下如何设计自己的界面。1、进入D:apache-tomcat-6.0.30webappscasWEB-INFviewjsp,把default文件夹复制一份在本目录下,这里我把文件夹修改为coolszy。2、进入D:apache-tomcat-

17、6.0.30webappscasWEB-INFviewjspcoolszyui。在该目录下你将会看到如下文件:casConfirmView.jsp 在浏览器跳转到用户想要访问的页面之前如果有警告信息,这个页面将会被显示。casGenericSuccess.jsp这个页面一般不会被显示,除非我们直接访问验证服务器的验证界面。5:8080/cas。casLoginView.jsp重点修改的页面。这个就是输入验证信息的界面。casLogoutView.jsp注销界面serviceErrorView.jsp如果用户想要访问的服务没有使用CAS,这个页面将会显示出来。注意

18、:如果我们所有的业务系统都使用了CAS,这个界面则会没有任何作用。如果想修改界面,我建议我们首先熟悉里面所有的jsp页面。重点是casLoginView.jsp还有includes目录下的两个文件。我们在修改时尽量不要修改forms和逻辑标签。除非我们比较熟悉他们。如果我们定义的页面中含有样式表,可直接修改D:apache-tomcat-6.0.30webappscasthemesdefault目录下的cas.css文件。当然我们也可以自己创建一个css文件,个人建议也把文件放到D:apache-tomcat-6.0.30webappscasthemes中,可新建一个目录比如coolszy。接

19、着我们要修改jsp页面中的引用路径。打开D:apache-tomcat-6.0.30webappscasWEB-INFviewjspcoolszyuiincludestop.jsp文件。找到如下代码:<spring:theme code="standard.custom.css.file" var="customCssFile" />我们需要standard.custom.css.file的值。该值存在于D:apache-tomcat-6.0.30webappscasWEB-INFper

20、ties文件中。修改为我们的路径。引用的图片也需要注意相对路径和绝对路径。3、进入D:apache-tomcat-6.0.30webappscasWEB-INFclasses目录,复制default_perties,我这里重新命名为coolszy_perties。打开该文件,修改页面路径,我这里是把default全部替换为coolszy。注意:该目录下存在很多messages_*.properties文件,主要是为了国际化。我把不需要的语言给删除掉。同时修改messages_zh_CN.properties文件中的信息,使得提示信息更加符合我们的需求。这个文

21、件我是在Eclipse中修改的。我的Eclipse安装了PropertiesEditor插件。4、打开D:apache-tomcat-6.0.30webappscasWEB-INFperties文件,把cas.viewResolver.basename=default_views 修改为cas.viewResolver.basename=coolszy_views5、启动服务器,测试下效果。有可能显示原来的界面,可尝试把D:apache-tomcat-6.0.30workCatalina 目录下的文件夹清空掉。5 服务器端超时配置打开D:apache-tomcat-6.0.30w

22、ebappscasWEB-INFspring-configuration目录中的applicationContext.xml文件,修改如下部分信息:<bean id="httpClient" class="org.jasig.cas.util.HttpClient"p:readTimeout="5000" p:connectionTimeout="5000" />修改我们所需要的超时时间。6 HTTPS验证配置6.1 普通证书注:如果电脑上没有设置环境变量JAVA_HOME,请设置完毕后再操作。JAVA

23、_HOME = E:JAVAJDK1.6PATH = $PATH;E:JAVAJDK1.6BIN6.1.1 创建key1、进入cmd。输入“cd”来到系统根目录2、输入命令keytool -genkey -alias cas-server -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600注:参数-validity指证书的有效期(天),缺省有效期只有90天。其它参数含义请在cmd上输入keytool 回车即可看到。在生成证书时会让你输入信息,其中“您的名字与姓氏是什

24、么?”这个内容必须填写cas服务器所对应的域名或者服务器的计算机名,我这里使用计算机名:图5 创建有效期为3600天的CA证书这样在我们的C盘根目录下生成一个名为server.keystore的证书。6.1.2 将证书导入的JDK的证书信任库中1、导出证书,命令如下:keytool -export -trustcacerts -alias cas-server -file server.cer -keystore server.keystore -storepass changeitk注:server.keystore 为我们上一步生成的证书。2、导入到证书信任库,命令如下:keytool -

25、import -trustcacerts -alias casserver -file server.cer -keystore "C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts" -storepass changeit图6 导出证书注:JDK的路径根据你电脑安装的位置进行修改。另外如果你电脑中安装了JRE,还应执行如下命令:keytool -import -trustcacerts -alias casserver -file server.cer -keystore "C:Program FilesJav

26、ajre6libsecuritycacerts" -storepass changeit3、顺便补充另外两个命令列出所导入证书keytool -list -v -keystore "C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts"删除存在的证书keytool -delete -trustcacerts alias casserver  -keystore  "C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts" -st

27、orepass changeit注:如果提示输入密码,则输入:changeit6.1.3 配置TOMCAT服务器打开D:apache-tomcat-6.0.30confserver.xml 文件,找到:<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"maxThreads="150" scheme="https" secure="true" clientAuth="false"ss

28、lProtocol="TLS" />该内容默认是被注释掉。我们把该段注释删除:<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"port="8443" minSpareThreads="5" maxSpareThreads="75" enableLookups="true"disableUploadTimeout="true" acceptCount="10

29、0" maxThreads="200" scheme="https"secure="true" SSLEnabled="true" clientAuth="false" sslProtocol="TLS"keystoreFile="C:server.keystore" keystorePass="changeit" />其中 keystoreFile为已经生成的服务器证书的地址 keystorePass为自定义的服务器证

30、书的密码6.1.4 测试打开浏览器输入5:8443/cas/如果出现如下警告信息,点击确定。图7 https弹出安全访问提示6.2 使用CA证书在一些企业中会使用CA证书进行验证,本节讲解如何使用CA证书。6.2.1 准备工作使用如下命令把上一节的证书从CAS验证服务器和业务服务器上的JRE中删除keytool -delete -trustcacerts -alias casserver  -keystore  "C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts" -

31、storepass changeitkeytool -delete -trustcacerts -alias casserver -keystore "C:Program FilesJavajre6libsecuritycacerts" -storepass changeit6.2.2 创建key在cas验证服务器输入命令keytool -genkey -alias -keyalg RSA -keysize 2048 -keypass changeit -storepass changeit -keystore coolszy.jks -validity 3600其中为CA

32、S验证服务器的对应的域名。在生成证书时会让你输入信息,其中“您的名字与姓氏是什么?”这个内容同上:图8 生成客户端证书这样在我们的C盘根目录下生成一个名为coolszy.jks的文件。6.2.3 创建证书请求命令:keytool -certreq -alias -file coolszy.csr -keystore coolszy.jks -keypass changeit -storepass changeit图9 导出客户端证书6.2.4 申请CA证书1、进入公司的CA证书申请网站图10 CA证书申请网站页面2、点击“申请一个证书”“高级证书申请”“使用 base64 编码的 CMC 或

33、PKCS #10 文件提交 一个证书申请,或使用 base64 编码的 PKCS #7 文件续订证书申请。”“浏览要插入的文件”选择“C:coolszy.csr”“提交”“选择Base 64 编码”“下载证书链”保存certnew.p7b。图11 选择证书申请图12 CA证书高级申请页面图13 填写CA证书申请信息6.2.5 导入证书keytool -import -trustcacerts -alias -file c:certnew.p7b -keystore coolszy.jks -keypass changeit -storepass changeit图14 导入申请到的CA证书6.

34、2.6 CAS验证服务器端Tomcat配置修改server.xml,开启开启https。<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"SSLEnabled="true" maxThreads="150" scheme="https" secure="true"clientAuth="false" sslProtocol="TLS&quo

35、t; keyAlias=""keystoreFile="C:coolszy.jks" keypass="changeit" />7 业务系统配置7.1 JAVA版本7.1.1 添加jar包解压cas-client-3.2.0-release.zip到磁盘上,我这里放在D盘中。并且把D:cas-client-3.2.0modules目录中的所有jar包拷贝到我们业务系统中。注意删除重复的jar包。7.1.2 导入证书A、普通证书我们需要把CAS验证服务器上生成的server.cer的证书导入到我们业务系统JDK上。keytool

36、-import -trustcacerts -alias casserver -file server.cer -keystore "C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts" -storepass changeit图15 导出证书信息B、使用CA证书1、进入公司的CA证书申请网站2、点击“下载一个 CA 证书,证书链或 CRL”3、编码方式选择“Base 64”4、点击“下载 CA 证书”,保存到磁盘上5、在命令控制台执行如下命令keytool -import -keystore "C:Program

37、 FilesJavajre6libsecuritycacerts" -file c:certnew.cer -alias -storepass changeitkeytool -import -keystore "C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts" -file c:certnew.cer -alias -storepass changeit注意:根据JDK和JRE的安装路径进行相应的修改,如果没有安装JRE,则第一条命令不需要执行。7.1.3 配置业务系统web.xml文件在业务系统的web.x

38、ml中添加如下配置信息<!- CAS 客户端配置 -><filter><filter-name>CAS Authentication Filter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><!- CAS验证服务器地址,有域名填写域名 -><init-param><param-name>casServerLoginUrl</par

39、am-name><param-value>6:8443/cas/login</param-value></init-param><init-param><param-name>renew</param-name><param-value>false</param-value></init-param><init-param><param-name>gateway</param-name><param-val

40、ue>false</param-value></init-param><!- 客户端应用服务器地址 -><init-param><param-name>serverName</param-name><param-value>40:8080</param-value></init-param></filter><!-负责Ticket校验 -><filter><filter-name>CAS Validat

41、ion Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>https:/IMC-Server:8443/cas/</param-value></init-param&g

42、t;<init-param><param-name>serverName</param-name><param-value>40:8080</param-value></init-param><init-param><param-name>useSession</param-name><param-value>true</param-value></init-param><init-param><par

43、am-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param></filter><filter><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter<

44、;/filter-class></filter><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 Authentication Filter</fi

45、lter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS HttpServletRequest Wrapper Filte

46、r</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping>注意:蓝色的部分根据实际情况做相应的修改。红色部分高亮IMC-Server是我们在生成证书时填写的“您的名字与姓氏

47、是什么?”。8433为Tomcat上的SSL端口,在在现实中我们一般使用80端口。如果使用80端口,则端口号不需要写在配置文件上。7.1.4 发布系统,测试。我们访问业务系统地址:40:8080/casclient/如果出现如下警告信息,点击“继续浏览此网站(不推荐)。”图16 通过https协议访问时出现证书安全提示然后我们输入用户名和密码,登录成功。8 自定义登录8.1 服务端配置1、修改/WEB-INF/web.xml,为cas增加一个/remoteLogin和/remoteLogout的映射,否则总是会转到login那个请求去了:<servlet-

48、mapping><servlet-name>cas</servlet-name><url-pattern>/remoteLogin</url-pattern></servlet-mapping><servlet-mapping><servlet-name>cas</servlet-name><url-pattern>/remoteLogout</url-pattern></servlet-mapping>2、然后修改cas-servlet.xml文件,增加对

49、/remoteLogin和/remoteLogout映射的处理,需要增加两个新流程:<!- 增加远程控制者,允许以/remote请求启动remote控制流程 -><bean id="handlerMappingB"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/remoteLogin&qu

50、ot;>remoteLoginController</prop><prop key="/remoteLogout">remoteLogoutController</prop></props></property><property name="interceptors"><list><ref bean="localeChangeInterceptor" /></list></property></bean

51、><bean id="remoteLoginController" class="org.springframework.webflow.mvc.servlet.FlowController"><property name="flowExecutor" ref="remoteLoginFlowExecutor" /><property name="flowUrlHandler" ref="flowUrlHandler" /></

52、bean><webflow:flow-executor id="remoteLoginFlowExecutor"flow-registry="remoteLoginFlowRegistry"><webflow:flow-execution-attributes><webflow:always-redirect-on-pausevalue="false" /></webflow:flow-execution-attributes></webflow:flow-executor&

53、gt;<webflow:flow-registry id="remoteLoginFlowRegistry"flow-builder-services="builder"><webflow:flow-location path="/WEB-INF/remoteLogin-webflow.xml"id="remoteLogin" /></webflow:flow-registry><webflow:flow-builder-services id="flowBuil

54、derServices"view-factory-creator="viewFactoryCreator" /><bean id="remoteLoginAction" class="com.cas.web.flow.RemoteLoginAction"p:argumentExtractors-ref="argumentExtractors"p:warnCookieGenerator-ref="warnCookieGenerator"p:ticketGrantingTick

55、etCookieGenerator-ref="ticketGrantingTicketCookieGenerator" /><bean id="remoteLogoutController" class="org.springframework.webflow.mvc.servlet.FlowController"><property name="flowExecutor" ref="remoteLogoutFlowExecutor" /><property

56、name="flowUrlHandler" ref="flowUrlHandler" /></bean><webflow:flow-executor id="remoteLogoutFlowExecutor"flow-registry="remoteLogoutFlowRegistry"><webflow:flow-execution-attributes><webflow:always-redirect-on-pausevalue="false"

57、 /></webflow:flow-execution-attributes></webflow:flow-executor><webflow:flow-registry id="remoteLogoutFlowRegistry"flow-builder-services="builder"><webflow:flow-location path="/WEB-INF/remoteLogout-webflow.xml"id="remoteLogout" /><

58、;/webflow:flow-registry><bean id="remoteLogoutAction" class="com.cas.web.flow.RemoteLogoutAction"p:argumentExtractors-ref="argumentExtractors"p:warnCookieGenerator-ref="warnCookieGenerator"p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTic

59、ketCookieGenerator"p:centralAuthenticationService-ref="centralAuthenticationService" />3、流程定义的xml文件:可以看到上面将请求指向了webflow配置文件/WEB-INF/remoteLogin-webflow.xml和/WEB-INF/remoteLogout-webflow.xml,我们需要创建此文件并配置其成为我们所需的流程。以下是remoteLogin-webflow.xml全文:<?xml version="1.0" encodin

60、g="UTF-8"?><flow xmlns="/schema/webflow"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/webflow /schema/webflow/spring-webflow-2.0.xsd"

61、start-state="remoteLogin"><!- <on-start> <evaluate expression="remoteLoginAction.doBind(flowRequestContext, flowScope.credentials)" /> </on-start> -><var name="credentials"class="org.jasig.cas.authentication.principal.UsernamePasswordC

62、redentials" /><!- 远程登陆主要Action -><action-state id="remoteLogin"><evaluate expression="remoteLoginAction" /><transition on="error" to="remoteCallbackView" /><transition on="submit" to="bindAndValidate" />

63、;<transition on="checkTicketGrantingTicket" to="ticketGrantingTicketExistsCheck" /></action-state><!- 远程回调页面,主要以JavaScript的方式回传一些参数用 -><end-state id="remoteCallbackView" view="remoteCallbackView" /><action-state id="bindAndValid

64、ate"><evaluateexpression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" /><transition on="success" to="submit" /><transition on="error" to="remoteCallbackView" /></action-state><deci

65、sion-state id="ticketGrantingTicketExistsCheck"><if test="flowScope.ticketGrantingTicketId != null" then="hasServiceCheck"else="gatewayRequestCheck" /></decision-state><decision-state id="hasServiceCheck"><if test="flowScope.service != null" then="generateServiceTicket"else="

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论