1、Cas4.1.2应用实践一、 项目概述 .2概述 .2Cas 介绍 .2二、 项目准备 .3三、 CAS 配置 .5(一) 服务端配置 .51. 安装 .52. 配置修改 .6(1 )比较简单的数据库连接认证 .6(2)项目中我们采用更自由的自定义认证方式 .7(3)自定义 session.10(二) 客户端配置 .121. 增加过滤器 .122. 修改服务端配置 .143. cas 测试 .14四、 C/S 客户端 android 端及第三方接入 CAS 统一用户验证服务 .15(一) Restful 模式 .151. 添加相应的依赖包 .162. 修改服务端 cas 配置 .163. 编写
2、自定义 TicketResource .164. 修改配置文件 .175. 进行测试 .18(二) 代理模式 .211. 服务端配置 .212. 代理端配置 .223. 被代理访问的客户端配置 .224. 代理模式测试 .23五、 使用 redis 存储 tickets .25(一) 系统准备 .25(二) 修改配置 .26(三) 编写 tickets 存储类 .27六、 术语解释 .30TGT(Ticket Grangting Ticket) .30TGC (Ticket-granting cookie) .30ST(Service Ticket) .30PGT(Proxy Granting
3、 Ticket) .31PGTIOU(全称 Proxy Granting Ticket I Owe You) .31PT ( Proxy Ticket) .31TGT、ST、PGT、PT 之间关系 .321、项目概述概述现有项目 web 应用系统, android 系统,客户端 c/s 系统,外围第三方系统;其中 web 应用系统分为原有系统与新建系统,为了统一进行用户身份认证,同时为客户提供单点登录,我们采用 CAS 对系统进行改造集成。对于 c/s 系统,android 系统,我们采用 CAS Proxy 代理模式和 Restful 方式进行用户验证;外围第三方系统采用代理模式为其提供 w
4、ebservice 接口服务进行用户验证。对应 Web 应用系统中的新建系统和一部分原有系统采用集中统一登录界面,只需要改造 cas 服务端的登录界面便可以达到目的。而对于部分原有系统为不改变用户使用习惯,只修改其登录后台处理部分,使用 ajax 跨域方式进行用户验证。以下以本机 8080 端口为服务, 18080 为客户端, 38080 为代理端进行简单的搭建测试,其完成整示例下载地址http:/ 介绍Cas 包括 Cas Server 和 Cas Client 两部分CAS Server 负责完成对用户的认证工作, 需要独立部署 ,CAS Server 会处理用户名 / 密码等凭证。负责处
5、理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。(原则上,客户端应用不再接受任何的用户名密码等 Credentials )。CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。实现原理:1 个 cookie+N 个 sessionCas 创建 cookie 在所有应用中登录时 cas 使用,各应用通过在 IE 创建各自的 session 来标识应用是否已经登录。Cookie:在 cas 为各应用登录时使用,实现了只须一次录入用户密码Session:各应用会创建自己的 session 表示是否登录。C
6、AS 的核心就是其 Ticket,及其在 Ticket 之上的一系列处理操作。CAS 的主要票据有 TGT、ST、PGT、PGTIOU、PT,其基本框架如下图所示:2、项目准备为实现以上项目目标,我们需要准备以下工具Web 应用服务:apache-tomcat-7.0.73 ,Jdk:1.8.0_51,数据库:mysql缓存数据库:redis服务端下载CAS 官网下载 https:/www.apereo.org/projects/cas/download-cas相应版本的 cas server,这里我们选择 CAS v4.1.2 版本,下载后建立 maven 工程编译后,在 cas-serve
7、r-webapp 下获得 cas.war。客户端下载从 https:/ 下载 java-cas-client,版本3.4.2,建立 maven 工程编译;从 https:/ 下载cas-sample-java-webapp,建立 maven 工程编译。其他配置:Cas 支持 https,可以使用 ssl 相关命令自行申请证书或者利用第三方证书这里不再累述,修改 tomcat Server.xml 的配置3、CAS 配置(1 ) 服务端配置1.安装将以上下载的源码编译后得到的 cas.war 解压后拷贝到 tomcat 的 webapp 目录下为了方便我们使用让 cas 支持 http(1)修改
8、 WEB-INFdeployerConfigContext.xml,加入p:requireSecure=“false“ (2)spring-configurationticketGrantingTicketCookieGenerator.xml,修改 p:cookieSecure=“false“(3)WEB-INFspring-configurationwarnCookieGenerator.xml ,修改p:cookieSecure=“false“修改完成后,启动服务,在地址栏输入地址 http:/127.0.0.1:8080/cas/login,出现以下界面输入账号 casuser,密码
9、Mellon 登录成功,界面如下服务端安装完成。2.配置修改(1)比较简单的数据库连接认证修改/WEB-INF/deployerConfigContext.xml,屏蔽增加以下配置MD5 (2)自由的自定义认证方式由于项目中统一登录界面需要增加验证码输入,当然可以自定义增加或减少相应的登录输入项。A.首先修改 WEB-INFviewjspdefaultuicasLoginView.jsp 中增加 vcode输入项B.修改WEB-INFwebflowloginlogin-webflow.xml为UsernamePasswordVcodeCredential 为自定义需要编写的类在 viewLog
10、inForm 中增加C.编写的类 UsernamePasswordVcodeCredential继承 UsernamePasswordCredential 类,代码如下:public class UsernamePasswordVcodeCredential extends UsernamePasswordCredential public UsernamePasswordVcodeCredential(final String userName, final String password,final String vcode) this.setUsername(userName);this
11、.setPassword(password);this.setVcode(vcode);public UsernamePasswordVcodeCredential()super();NotNullSize(min=1, message = “required.vcode“)private String vcode;public String getVcode() return vcode;public void setVcode(String vcode) this.vcode = vcode; D.用户输入项验证代码编写配置编写类 ZkZdyAuthenticationHandler 继承
12、AbstractUsernamePasswordAuthenticationHandler,代码如下:public class ZkZdyAuthenticationHandler extends AbstractUsernamePasswordAuthenticationHandlerOverrideprotected HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential credential)throws GeneralSecurityException, PreventedExcepti
13、on final String username = credential.getUsername();final String encryptedPassword = this.getPasswordEncoder().encode(credential.getPassword();/获取校验码,这里可以使用自定义的 UsernamePasswordVcodeCredential,增加了验证码final String vcode=(UsernamePasswordVcodeCredential)credential).getVcode();/添加自己的代码进行校验boolean flag=v
14、alidate(username,encryptedPassword,vcode);if(!flag)throw new FailedLoginException(“Password does not match value on record.“);return createHandlerResult(credential, this.principalFactory.createPrincipal(username), null);修改/WEB-INF/deployerConfigContext.xml 配置屏蔽以前的配置完成后 Cas 服务重启,进入地址 http:/127.0.0.1:8080/cas/login,登录界面如下图:登录后后台可以获取 vcode获取 vcode 后可以进行相应的处理,处理根据业务需求不同不再累述也可以修改 userinfo屏蔽原有的 attributeRepository,改成