收藏 分享(赏)

CAS配置指南.docx

上传人:j35w19 文档编号:7806462 上传时间:2019-05-26 格式:DOCX 页数:58 大小:1.18MB
下载 相关 举报
CAS配置指南.docx_第1页
第1页 / 共58页
CAS配置指南.docx_第2页
第2页 / 共58页
CAS配置指南.docx_第3页
第3页 / 共58页
CAS配置指南.docx_第4页
第4页 / 共58页
CAS配置指南.docx_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、1 准备工具cas-server-3.5.1-release.zip http:/downloads.jasig.org/cas/cas-client-3.2.1-release.zip http:/downloads.jasig.org/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

2、文件名修改为 cas.war。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 及 spri

3、ng-jdbc.jar。2、打开 D:apache-tomcat-6.0.30webappscasWEB-INFdeployerConfigContext.xml 文件,在oracle.jdbc.driver.OracleDriverjdbc:oracle:thin:10.12.21.140:1521:orclscotttiger在该文件中搜索“SimpleTestUsernamePasswordAuthenticationHandler”这是 cas 提供的最简单的验证方式,即用户名和密码相等即可登录成功。现假设我们的登录用户名和密码存在于 t_login 表中,信息如下:ID USERNA

4、ME PASSWORD1 coolszy 123456把上面的 bean 给注销掉,添加如下信息:当然我们还可以指定表和字段。(接着上面的配置文件)重启服务器,测试。图 3 CAS 验证成功页面3.2 密码已密文存在数据库中以上的配置只适合密码已明文的方式存储在数据库中,但是实际中我们的密码都是经过加密的。下面演示下如果使用 MD5 加密密码。首先配置 MD5,该配置信息放在数据源配置的下面。然后修改上面的数据库验证配置,添加密码加密方式,修改后如下:3.3 使用自己编写的加密类上面介绍了密码采用 MD5 加密的配置方式,下面介绍下如果使用我们自己编写的加密类。1、新建一个 Java 项目,引

5、入 cas-server-core-3.4.5.jar 包,2、新建一个 Java 类,实现org.jasig.cas.authentication.handler.PasswordEncoder 接口中的 public String encode(String arg0)方法,这是用来对输入的密码进行加密,我这里命名为:PasswordEncrypt图 4 CAS 项目配置3、在 encode()方法中可以根据实际的加密方式编写代码。package szy.cas.encrypt;import java.security.MessageDigest;import org.jasig.cas.

6、authentication.handler.PasswordEncoder;public class PasswordEncrypt implements PasswordEncoder public String encode(String password) try MessageDigest alg = MessageDigest.getInstance(“SHA-1“);alg.reset();alg.update(password.getBytes();byte hash = alg.digest();String digest = “;for (int i = 0; i 把 cl

7、ass 修改为我们的加密类,即测试,成功。4 修改界面4.1 修改验证通过后显示提示信息的界面修改 D:apache-tomcat-6.0.30webappscasWEB-INFviewjspdefaultuicasGenericSuccess.jsp 页面,添加如下内容调转到指定页面4.2 定义自己的验证界面cas 给我们提供了一个“default”界面,该界面比较简单,而且也不怎么漂亮,因此我们需要定制自己的验证界面。下面介绍一下如何设计自己的界面。1、进入 D:apache-tomcat-6.0.30webappscasWEB-INFviewjsp,把 default文件夹复制一份在本目

8、录下,这里我把文件夹修改为 coolszy。2、进入 D:apache-tomcat-6.0.30webappscasWEB-INFviewjspcoolszyui。在该目录下你将会看到如下文件:casConfirmView.jsp 在浏览器跳转到用户想要访问的页面之前如果有警告信息,这个页面将会被显示。casGenericSuccess.jsp 这个页面一般不会被显示,除非我们直接访问验证服务器的验证界面。http:/10.12.21.45:8080/cas。casLoginView.jsp 重点修改的页面。这个就是输入验证信息的界面。casLogoutView.jsp 注销界面servic

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

10、件放到 D:apache-tomcat-6.0.30webappscasthemes 中,可新建一个目录比如 coolszy。接着我们要修改jsp 页面中的引用路径。打开 D:apache-tomcat-6.0.30webappscasWEB-INFviewjspcoolszyuiincludestop.jsp 文件。找到如下代码:我们需要 standard.custom.css.file 的值。该值存在于D:apache-tomcat-6.0.30webappscasWEB-INFclassescas-theme-default.properties 文件中。修改为我们的路径。引用的图片也需

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

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

13、scasWEB-INFspring-configuration目录中的 applicationContext.xml 文件,修改如下部分信息:修改我们所需要的超时时间。6 HTTPS 验证配置6.1 普通证书注:如果电脑上没有设置环境变量 JAVA_HOME,请设置完毕后再操作。JAVA_HOME = E:JAVAJDK1.6PATH = $PATH;E:JAVAJDK1.6BIN6.1.1 创建 key1、进入 cmd。输入“cd”来到系统根目录2、输入命令keytool -genkey -alias cas-server -keyalg RSA -keypass changeit -sto

14、repass changeit -keystore server.keystore -validity 3600注:参数-validity 指证书的有效期 (天) ,缺省有效期只有 90 天。其它参数含义请在 cmd 上输入 keytool 回车即可看到。在生成证书时会让你输入信息,其中“您的名字与姓氏是什么?”这个内容必须填写 cas 服务器所对应的域名或者服务器的计算机名,我这里使用计算机名:图 5 创建有效期为 3600 天的 CA 证书这样在我们的 C 盘根目录下生成一个名为 server.keystore 的证书。6.1.2 将证书导入的 JDK 的证书信任库中1、导出证书,命令如下

15、:keytool -export -trustcacerts -alias cas-server -file server.cer -keystore server.keystore -storepass changeitk注:server.keystore 为我们上一步生成的证书。2、导入到证书信任库,命令如下:keytool -import -trustcacerts -alias casserver -file server.cer -keystore “C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts“ -storepass cha

16、ngeit图 6 导出证书注:JDK 的路径根据你电脑安装的位置进行修改。另外如果你电脑中安装了 JRE,还应执行如下命令:keytool -import -trustcacerts -alias casserver -file server.cer -keystore “C:Program FilesJavajre6libsecuritycacerts“ -storepass changeit3、顺便补充另外两个命令列出所导入证书keytool -list -v -keystore “C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts“删除

17、存在的证书keytool -delete -trustcacerts alias casserver -keystore “C:Program FilesJavajdk1.6.0_21jrelibsecuritycacerts“ -storepass changeit注:如果提示输入密码,则输入:changeit6.1.3 配置 TOMCAT 服务器打开 D:apache-tomcat-6.0.30confserver.xml 文件,找到:该内容默认是被注释掉。我们把该段注释删除:其中 keystoreFile 为已经生成的服务器证书的地址keystorePass 为自定义的服务器证书的密码6

18、.1.4 测试打开浏览器输入https:/10.12.21.45: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“ -storepass change

19、itkeytool -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其中 为 CAS 验证服务器的对应的域名。在生成证书

20、时会让你输入信息,其中“您的名字与姓氏是什么?”这个内容同上:图 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 或 PKCS

21、#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 导入申请到的

22、CA 证书6.2.6 CAS 验证服务器端 Tomcat 配置修改 server.xml,开启开启 https。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 -import -trustcacerts -

23、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 FilesJavajre6libsecuritycacerts“

24、 -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.xml 中添加如下配置信息CAS Authentication Filtero

25、rg.jasig.cas.client.authentication.AuthenticationFiltercasServerLoginUrlhttps:/10.12.21.46:8443/cas/loginrenewfalsegatewayfalseserverNamehttp:/10.12.21.140:8080CAS Validation Filterorg.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFiltercasServerUrlPrefixhttps:/IMC-Server:8443/cas/s

26、erverNamehttp:/10.12.21.140:8080useSessiontrueredirectAfterValidationtrueCAS HttpServletRequest Wrapper Filterorg.jasig.cas.client.util.HttpServletRequestWrapperFilterCAS Assertion Thread Local Filterorg.jasig.cas.client.util.AssertionThreadLocalFilterCAS Authentication Filter/*CAS Validation Filter

27、/*CAS HttpServletRequest Wrapper Filter/*CAS Assertion Thread Local Filter/*注意:蓝色的部分根据实际情况做相应的修改。红色部分高亮 IMC-Server是我们在生成证书时填写的“您的名字与姓氏是什么?”。8433 为 Tomcat 上的 SSL 端口,在在现实中我们一般使用 80 端口。如果使用 80 端口,则端口号不需要写在配置文件上。7.1.4 发布系统,测试。我们访问业务系统地址:http:/10.12.21.140:8080/casclient/如果出现如下警告信息,点击“继续浏览此网站(不推荐)。”图 16

28、通过 https 协议访问时出现证书安全提示然后我们输入用户名和密码,登录成功。8 自定义登录8.1 服务端配置1、修改/WEB-INF/web.xml,为 cas 增加一个/remoteLogin 和/remoteLogout的映射,否则总是会转到 login 那个请求去了:cas/remoteLogincas/remoteLogout2、然后修改 cas-servlet.xml 文件,增加对/remoteLogin 和/remoteLogout 映射的处理,需要增加两个新流程:remoteLoginControllerremoteLogoutController3、流程定义的 xml 文件

29、:可以看到上面将请求指向了 webflow 配置文件/WEB-INF/remoteLogin-webflow.xml 和/WEB-INF/remoteLogout-webflow.xml,我们需要创建此文件并配置其成为我们所需的流程。以下是 remoteLogin-webflow.xml 全文:以下是 remoteLogout-webflow.xml 全文:4、流程首先由 Action 类进行处理,成功或失败都将转回 remoteCallbackView,这样就返回了远程的登录页面。登录处理 Action 类:package org.jasig.cas.web.flow;import java

30、.util.List;import javax.servlet.http.HttpServletRequest;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;import org.jasig.cas.authentication.principal.Service;import org.jasig.cas.web.support.ArgumentExtractor;import org.jasig.cas.web.support.CookieRetrievingCooki

31、eGenerator;import org.jasig.cas.web.support.WebUtils;import org.springframework.util.StringUtils;import org.springframework.webflow.action.AbstractAction;import org.springframework.webflow.execution.Event;import org.springframework.webflow.execution.RequestContext;public class RemoteLoginAction exte

32、nds AbstractAction /* CookieGenerator for the Warnings. */NotNullprivate CookieRetrievingCookieGenerator warnCookieGenerator;/* CookieGenerator for the TicketGrantingTickets. */NotNullprivate CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator;/* Extractors for finding the service. *

33、/NotNullSize(min = 1)private List argumentExtractors;/* Boolean to note whether weve set the values on the generators or not. */private boolean pathPopulated = false;protected Event doExecute(final RequestContext context) throws Exception final HttpServletRequest request = WebUtils.getHttpServletReq

34、uest(context);if (!this.pathPopulated) final String contextPath = context.getExternalContext().getContextPath();final String cookiePath = StringUtils.hasText(contextPath) ? contextPath: “/“;logger.info(“Setting path for cookies to: “ + cookiePath);this.warnCookieGenerator.setCookiePath(cookiePath);t

35、his.ticketGrantingTicketCookieGenerator.setCookiePath(cookiePath);this.pathPopulated = true;context.getFlowScope().put(“ticketGrantingTicketId“,this.ticketGrantingTicketCookieGenerator.retrieveCookieValue(request);context.getFlowScope().put(“warnCookieValue“,Boolean.valueOf(this.warnCookieGenerator.

36、retrieveCookieValue(request);final Service service = WebUtils.getService(this.argumentExtractors,context);if (service != null context.getFlowScope().put(“service“, service);/ 客户端必须传递loginUrl参数过来,否则无法确定登陆目标页面if (StringUtils.hasText(request.getParameter(“loginUrl“) context.getFlowScope().put(“remoteLo

37、ginUrl“,request.getParameter(“loginUrl“); else request.setAttribute(“remoteLoginMessage“,“loginUrl parameter must be supported.“);return error();/ 若参数包含submit则进行提交,否则进行验证if (StringUtils.hasText(request.getParameter(“submit“) return result(“submit“); else return result(“checkTicketGrantingTicket“);pu

38、blic void setTicketGrantingTicketCookieGenerator(final CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator) this.ticketGrantingTicketCookieGenerator = ticketGrantingTicketCookieGenerator;public void setWarnCookieGenerator(final CookieRetrievingCookieGenerator warnCookieGenerator) thi

39、s.warnCookieGenerator = warnCookieGenerator;public void setArgumentExtractors(final List argumentExtractors) this.argumentExtractors = argumentExtractors;退出处理 Action 类:package org.jasig.cas.web.flow;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServ

40、letResponse;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;import org.jasig.cas.CentralAuthenticationService;import org.jasig.cas.authentication.principal.Service;import org.jasig.cas.web.support.ArgumentExtractor;import org.jasig.cas.web.support.CookieRetrievin

41、gCookieGenerator;import org.jasig.cas.web.support.WebUtils;import org.springframework.util.StringUtils;import org.springframework.webflow.action.AbstractAction;import org.springframework.webflow.execution.Event;import org.springframework.webflow.execution.RequestContext;public class RemoteLogoutActi

42、on extends AbstractAction NotNullprivate CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator;NotNullprivate CookieRetrievingCookieGenerator warnCookieGenerator;NotNullprivate CentralAuthenticationService centralAuthenticationService;NotNullSize(min = 1)private List argumentExtractors

43、;private boolean pathPopulated = false;Overrideprotected Event doExecute(final RequestContext context) throws Exception final HttpServletRequest request = WebUtils.getHttpServletRequest(context);final HttpServletResponse response = WebUtils.getHttpServletResponse(context);if (!this.pathPopulated) fi

44、nal String contextPath = context.getExternalContext().getContextPath();final String cookiePath = StringUtils.hasText(contextPath) ? contextPath: “/“;logger.info(“Setting path for cookies to: “ + cookiePath);this.warnCookieGenerator.setCookiePath(cookiePath);this.ticketGrantingTicketCookieGenerator.s

45、etCookiePath(cookiePath);this.pathPopulated = true;context.getFlowScope().put(“ticketGrantingTicketId“,this.ticketGrantingTicketCookieGenerator.retrieveCookieValue(request);context.getFlowScope().put(“warnCookieValue“,Boolean.valueOf(this.warnCookieGenerator.retrieveCookieValue(request);final Servic

46、e service = WebUtils.getService(this.argumentExtractors,context);if (service != null context.getFlowScope().put(“service“, service);context.getFlowScope().put(“remoteLoginUrl“,request.getParameter(“service“);final String ticketGrantingTicketId = this.ticketGrantingTicketCookieGenerator.retrieveCooki

47、eValue(request);if (ticketGrantingTicketId != null) this.centralAuthenticationService.destroyTicketGrantingTicket(ticketGrantingTicketId);this.ticketGrantingTicketCookieGenerator.removeCookie(response);this.warnCookieGenerator.removeCookie(response);return result(“success“);public void setTicketGran

48、tingTicketCookieGenerator(final CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator) this.ticketGrantingTicketCookieGenerator = ticketGrantingTicketCookieGenerator;public void setWarnCookieGenerator(final CookieRetrievingCookieGenerator warnCookieGenerator) this.warnCookieGenerator = warnCookieGenerator;public void setArgumentExtractors(final List argumentExtractors) this.argumentExtractors = argumentExtractors;public void setCentralAuthenticationService(final CentralAuthenticationService centralAuthenticationService) this.centralAuthent

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报