1环境搭建以及把示例程序跑起来
1.1 安装jdk1.8
1.2 下载tomcat8+cas4.2.7服务端war+cas客户端war
1.2.1下载经过配置的Tomcat8和本教程配套文件
1.2.2下载配置好的cas4.2.7服务端的war包
1.2.3下载配置好的cas客户端的war包
1.3 秘钥库和数字证书相关的操作
1.3.1服务端生成秘钥库文件
1.3.2 服务端导出cer数字证书
1.3.3将服务端的数字证书导入到客户端JRE的秘钥库中
2启动tomcat并进行测试
2.1 测试单独访问cas服务端
2.2测试直接访问cas客户端
3其他说明
一切跑不起来的程序和走不通的教程都是耍流氓,二话不说,先按照我的步骤把程序跑起来在说吧。
安装jdk1.8,并且配置环境变量我就不多说了,后续操作都是以成功安装jdk为前提的。其实用jdk1.7也可以,只是这样的话你就需要自己修改一些东西。
这里只是说一下我的jdk1.8的安装位置。这个位置没必要和我一样,只是你如果和我一样的话,后面涉及到的keytyool相关的命令,你可以不用做如何修改,直接复制粘贴即可执行。
我的jdk的安装路径是:C:\Java
如图:
呕心沥血的制作,要求下载积分,望谅解。
需要说明的是,为了演示方便,服务端和客户端都部署在了同一台机器的同一个tomcat下,你跑起来之后,完全可以将cas服务端的war包和客户端的war包部署在不同的机器上,只要需要注意修改相关的IP地址,端口号以及数字证书内容。
环境包下载地址:
http://download.csdn.net/detail/pucao_cug/9814919
该压缩文件包含的内容有:配置好的tomcat8、生成好的服务端的秘钥库文件、服务端的数字证书文件,配置好的cas服务端的cas.properties文件,保存了需要在cmd命令的doc文档、cas服务端和cas客户端日志目录、数据库初始化sql脚本。
注意:该压缩下载完成并且解压后,你会得到cas-chenjie的文件夹,请将该文件夹存放到D盘的根目录。
如图:
下载完成后,请到mysql数据库中执行userdb.sql脚本,该脚本会创建名为userdb的数据库,并且会在该库中创建一个名为t_user的用户表,并且会插入两条测试数据。
说明:由于war包中对数据库的连接使用的账号是root,密码是root,数据库名称是userdb,所以如果你的mysql用户账户和密码与我不同,你要么是修改cas服务端的配置(本例需要在deployerConfigContext.xml中修改),要么就是你修改mysql的root账号的登录密码。如何修改请参考下面的博客:
Window上的mysql修改root账号的密码:
http://blog.csdn.net/pucao_cug/article/details/61428275
Linux上的mysql修改root 账号的密码:
http://blog.csdn.net/pucao_cug/article/details/65443560
war包下载地址:
http://download.csdn.net/detail/pucao_cug/9814898
该war文件是cas4.2.7的服务端的war包。服务端的war内我已经对WEB-INF文件夹中的web.xml文件、deployerConfigContext.xml文件、view目录内的jsp文件以及classes的services下的json配置文件做过修改。除了cas默认支持的功能外,该war包还实现了:登录页面的样式修改,让所有页面提示变为中文,登录时候对用户账户和密码的验证信息是从数据库中读取的,登录成功后,客户端需要获取用户相关的其他信息时,服务端会通过读取数据库的方式返回用户的其他信息。
cas服务端生成的日志信息会保存在D:\cas-chenjie\logs\server文件夹下。
注意:1.2.1操作完成后,你就有了相关的目录和环境,请将该本次下载的car.war包放置到D:\cas-chenjie\apache-tomcat-8.5.13-windows-x64\webapps目录内。需要额外提醒的是,cas4.2.7的war包需要cas.properties的配合,该war包内已经配置了cas.properties文件的位置是D:\cas-chenjie\cas.properties,这个cas.properties文件里也是需要有一些配置项需要修改的,如果你不太清楚要修改哪些项,最好还是下载下来,程序完美的跑起来之后再自己修改研究吧。
war包下载地址【好久没登录了,之前的地址居然404,今天我又重传了一个,里面包括war部署包和maven工程源码,估计该资源要审核后大家才能下载,请稍等】:
https://download.csdn.net/download/pucao_cug/10606763
该war文件是cas的客户端war包和maven工程源码。
客户端使用的是spring+springMVC,在该演示中,客户端不需要连接数据库,所有没有加入orm模块。
该客户端实现的功能是:当访问该客户端的某些URL,如果未登陆的话,需要跳转到服务端进行登录。该客户端的这个URL还演示了如何调用cas服务端获取当前登录用户的相关信息(由服务端负责从数据库中读取后返回给cas客户端)。
该示例版本的客户端并未和shiro进行整合,该整合留在后续文章在写吧。
cas客户端生成的日志信息会报错在D:\cas-chenjie\logs\client文件夹下。
注意:1.2.1操作完成后,你就有了相关的目录和环境,1.2.2操作完成后你就有了cas服务端,请将该本次下载的casClient.war包放置到D:\cas-chenjie\apache-tomcat-8.5.13-windows-x64\webapps目录内,这样你就有了cas客户端。先不急于启动tomcat,因为你还需要做导入数字证书到你本地的JRE秘钥库中的操作。请继续往下看,按照1.3章节的内容进行操作,操作完成后在启动tomcat。
你直接阅读本文的1.3.1和1.3.2和1.3.3就行,但是如果你想了解更多秘钥库和数字证书相关的内容和操作命令的话,可以参看该博文:
http://blog.csdn.net/pucao_cug/article/details/70136159
说明:其实该步骤你也可以省略,因为完成1.2.1的操作后,D:\cas-chenjie\cas-chenjie.keystore文件已经存在了。
如果你想亲手生成这个文件,请按本节内容进行操作,否则你可以直接去看1.3.2。
将文件“关于数字证书的操作命令.doc”内的生成数字证书的命令复制到cmd窗口执行:
如图:
执行成功后,你将得到秘钥库文件D:\cas-chenjie\cas-chenjie.keystore
如图:
注意:该秘钥库文件是用来导入到服务端的tomcat中的,不过你完成1.2.1操作后,关于tomcat的配置什么也不用做,因为我已经配置好了,主要就是修改server.xml文件。
说明:其实该步骤你也可以省略,因为完成1.2.1的操作后,D:\cas-chenjie\cas-chenjie.CASCHENJIE.cer文件已经存在了。
如果你想亲手生成这个文件,请按本节内容进行操作,否则你可以直接去看1.3.3。
将文件“关于数字证书的操作命令.doc”内的生成数字证书的命令复制到cmd窗口执行:
如图:
执行成功后,你将得到数字证书文件D:\cas-chenjie\cas-chenjie.CASCHENJIE.cer
如图:
该秘钥库文件是用来导入到客户端程序所部署的web容器所使用的JRE的秘钥库中的,我这里就是需要导入到C:\Java\jdk1.8.0_40\jre\lib\security\cacerts中,怎样导入呢,请接着往下看1.3.3。
注意:
该步骤不能省略,你必须亲手做。而且记得把命令中的客户端本地的JRE的秘钥库文件路径修改成你自己的【补充一下:因为word文件中第3个命令是在客户端执行的(CAS的客户端,就是业务系统所在的服务器),命令中导入的是D:\keystore目录下的CASCHENJIE.cer这个证书文件,所以要么你可以修改命令,要么你就把1.2.1下载下来的CASCHENJIE.cer放到D:\keystore目录下,在执行word文档中的第三个命令】
另外,请注意了word文件中的第1个和第2个命令是在服务端(也就是CAS所在的服务器)执行的,而第3个命令是在客户端(CAS的客户端,也就是业务系统服务器)执行的。
有的人可能没有下载那个word文档,这里直接贴出命令来:
第1个命令:keytool -genkey -keystore "D:\cas-chenjie\cas-chenjie.keystore" -alias "CASCHENJIE" -keyalg "RSA" -validity 36500 -dname "CN=localhost, OU=org, O=org.cj, L=昆明, ST=云南, C=中国" -keypass "chenjie" -storepass "chenjie"
第2个命令:keytool -alias "CASCHENJIE" -exportcert -keystore "D:\cas-chenjie\cas-chenjie.keystore" -file "D:\cas-chenjie\CASCHENJIE.cer" -storepass "chenjie"
第3个命令 :keytool -import -alias "CASCHENJIE" -keystore "C:\java\jdk1.8.0_40\jre\lib\security\cacerts" -file "D:\keystore\CASCHENJIE.cer" -trustcacerts -storepass changeit
再强调一次:第3个命令是在客户端(CAS的客户端,也就是业务系统服务器)上执行的,如果不修改命令直接执行的话,请将第2步生成的CASCHENJIE.cer端放到客户端(CAS的客户端,也就是业务系统服务器)机器的D:\keystore\目录下。
将文件“关于数字证书的操作命令.doc”内的在客户端的JRE秘钥库中导入服务端的证书的命令复制到cmd窗口执行:
如图:
回车后,cmd窗口中会输出一系列信息,并且询问:是否信任你要导入的证书。输入y然后回车
如图:
好了,一切部署完成,你可以看下文然后启动tomcat了。
因为该tomcat是部署在windows中,你可以将tomcat注册成服务,直接启动tomcat服务,或者执行运行start.bat启动tomcat。
访问地址:https://localhost:8090/cas
因为我们使用的是https访问,而localhost这个域名并没有加入到浏览器的信任站点中,所以浏览器提示不是私密连接
如图:
点击高级
如图:
点击继续前往localhost
如图:
输入账号cj密码cj登录成功(从数据库中读取的用户和密码进行验证,密码是MD5加密)
如图:
好了,cas服务端可以正常访问了。
直接访问客户端的某个URL,如果还未执行登陆,客户端会直接跳转到cas服务端的登录页面要求用户登录,登录完成后会跳转到用户所请求访问的客户端页面上。因为已经登录成功,客户端可以从cas服务端获取到登录用户的相关信息(本例中,cas服务端是从数据库中读取信息的)。
直接在浏览器中访问:http://localhost:8080/casClient
如图:
因为此时我们还未登陆,所以会跳转到服务端的登录页面,让我们登录
如图:
同样的,浏览器提示不是私密连接,不要紧继续访问即可
如图:
如图:
如图:
上图显示的id和account属性是客户端从服务端获取的,要在客户端完成这个获取,客户端的web.xml配置很重要,客户端的web.xml配置,完成1.2.3的下载后,在WEB-INF目录下即可看到,而读取用户信息的相关代码是在后台java文件中的,代码大体是这样的:
package org.cj.index.controller;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.util.AssertionHolder;
import org.jasig.cas.client.validation.Assertion;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value = "/index")
public classIndexController {
@RequestMapping(value = "", method = {RequestMethod.GET, RequestMethod.POST })
public String login(Model model,HttpServletRequest request) {
Assertionassertion=AssertionHolder.getAssertion();
if(assertion!=null)
{
AttributePrincipalattributePrincipal=assertion.getPrincipal();
if(attributePrincipal!=null)
{
String name=attributePrincipal.getName();
model.addAttribute("name", name);
Map map=attributePrincipal.getAttributes();
if(map!=null)
{
Object id=map.get("id");
Object account=map.get("account");
model.addAttribute("id", id);
model.addAttribute("account", account);
}
}
}
return "index";
}
}
完整的客户端源码下载地址
https://download.csdn.net/download/pucao_cug/10606763
访问URL:http://localhost:8080/casClient/demo/test
如图:
我的口号是“一切跑不起来的程序和走不通的教程都是耍流氓”在后续的文章中,使用的tomcat8环境会和本例中一样,所以完成1.2章节相关的下载还是有必要的。如果你按照本例中的步骤操作遇到问题,或者是走不同,跑不起来,在本文下面留言即可,我会回复的。