单点登录cas综述之cas4.2.7服务端+cas客户端+示例程序+环境搭建说明-陈杰
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其他说明
1环境搭建以及把示例程序跑起来
一切跑不起来的程序和走不通的教程都是耍流氓,二话不说,先按照我的步骤把程序跑起来在说吧。
1.1安装JDK1.8
安装jdk1.8,并且配置环境变量我就不多说了,后续操作都是以成功安装jdk为前提的。其实用jdk1.7也可以,只是这样的话你就需要自己修改一些东西。
这里只是说一下我的jdk1.8的安装位置。这个位置没必要和我一样,只是你如果和我一样的话,后面涉及到的keytyool相关的命令,你可以不用做如何修改,直接复制粘贴即可执行。
我的jdk的安装路径是:C:\Java
如图:
1.2下载tomcat8+cas4.2.7服务端war+cas客户端war
呕心沥血的制作,要求下载积分,望谅解。
需要说明的是,为了演示方便,服务端和客户端都部署在了同一台机器的同一个tomcat下,你跑起来之后,完全可以将cas服务端的war包和客户端的war包部署在不同的机器上,只要需要注意修改相关的IP地址,端口号以及数字证书内容。
1.2.1下载经过配置的Tomcat8和本教程配套文件
环境包下载地址:
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
1.2.2下载配置好的cas4.2.7服务端的war包
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文件里也是需要有一些配置项需要修改的,如果你不太清楚要修改哪些项,最好还是下载下来,程序完美的跑起来之后再自己修改研究吧。
1.2.3下载配置好的cas客户端的war包
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.3.1和1.3.2和1.3.3就行,但是如果你想了解更多秘钥库和数字证书相关的内容和操作命令的话,可以参看该博文:
http://blog.csdn.net/pucao_cug/article/details/70136159
1.3.1服务端生成秘钥库文件
说明:其实该步骤你也可以省略,因为完成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.3.2服务端导出cer数字证书
说明:其实该步骤你也可以省略,因为完成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。
1.3.3将服务端的数字证书导入到客户端JRE的秘钥库中
注意:
该步骤不能省略,你必须亲手做。而且记得把命令中的客户端本地的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了。
2启动tomcat并进行测试
因为该tomcat是部署在windows中,你可以将tomcat注册成服务,直接启动tomcat服务,或者执行运行start.bat启动tomcat。
2.1测试单独访问cas服务端
访问地址:https://localhost:8090/cas
因为我们使用的是https访问,而localhost这个域名并没有加入到浏览器的信任站点中,所以浏览器提示不是私密连接
如图:
点击高级
如图:
点击继续前往localhost
如图:
输入账号cj密码cj登录成功(从数据库中读取的用户和密码进行验证,密码是MD5加密)
如图:
好了,cas服务端可以正常访问了。
2.2测试直接访问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<String,Object> 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
如图:
3其他说明
我的口号是“一切跑不起来的程序和走不通的教程都是耍流氓”在后续的文章中,使用的tomcat8环境会和本例中一样,所以完成1.2章节相关的下载还是有必要的。如果你按照本例中的步骤操作遇到问题,或者是走不同,跑不起来,在本文下面留言即可,我会回复的。
单点登录cas综述之cas4.2.7服务端+cas客户端+示例程序+环境搭建说明-陈杰相关推荐
- CAS 使用 HTTPS 单向认证方式 服务端和客户端配置
注:以下配置为本人亲测,如有问题请留言:转载请注明:http://blog.csdn.net/wqmain/article/details/8562602 目录结构如下: l 名词解释 l 测试环 ...
- cas单点登录学习:cas服务端与客户端的搭建
单点登录:英文名称(Single Sign On),简称sso,是目前比较流行的服务于企业业务整合的解决方案之一,SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 然 ...
- SSO单点登录教程(四)自己动手写SSO单点登录服务端和客户端
作者:蓝雄威,叩丁狼教育高级讲师.原创文章,转载请注明出处. 一.前言 我们自己动手写单点登录的服务端目的是为了加深对单点登录的理解.如果你们公司想实现单点登录/单点注销功能,推荐使用开源的单点登录框 ...
- 详解比springSecurity和shiro更简单优雅的轻量级Sa-Token框架,比如登录认证,权限认证,单点登录,OAuth2.0,分布式Session会话,微服务网关鉴权
文章目录 1. 技术选型 2. Sa-Token概述 2.1 简单介绍 2.2 登录认证 2.3 权限认证 3. 功能一览 4. Sa-Token使用 4.1 引入Sa-Token依赖 4.2 Sa- ...
- java 集成 cas系统 服务端和客户端配置
http://blog.csdn.net/yunye114105/article/details/7997041 参考: http://blog.csdn.net/diyagea/article/de ...
- DotNetty系列六:将服务端和客户端改为Winform窗口,使用Redis做为缓存,实现用户登录,好友,群组上下线显示。
这次改动挺大的. 1.服务端和客户端改为Winform窗口.好多细节未处理,只是实现了功能. 2.使用Redis做为缓存,版本redis-3.0.1,和RedisDesktopManager做 ...
- CAS服务下单点登录(服务端与客户端)
转自:http://www.open-open.com/lib/view/open1359286846414.html 此文的目的是为了加深自己的理解,做一个备份与分享 过程全为自己的实际操作步骤 第 ...
- java模拟网易邮箱登录_使用服务端和客户端两种方法 模拟网易邮箱实现全选,全不选的功能...
服务端和客户端的差别是 服务端在每次全选或全不选是都要刷新界面 而客户端不会 服务端: 前台 DataKeyNames="id" DataSourceID="SqlDat ...
- java单点登录统一认证,JEECG 集成KiSSO单点登录实现统一身份认证
JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...
最新文章
- iptables 实现centos内网机器访问外网
- kotlin 一个加号引发的血案
- SQLi-LABS(1~10关详解)
- Android学习第二天-android常用命令
- pandas学习笔记三之赋值操作
- ~~通过预处理逆元的方式求组合数
- 亲密关系-【认知情绪】-每一次生气的背后有什么
- css实现时间数字特效字体格式
- 制作一个模拟Windows启动界面的文本进度条python
- grid report mysql_Grid++Report报表工具
- 运维学习:常用运维工具
- 詹姆斯——永远的皇帝
- 这本书献给所有铸就开源世界的人们
- 微信摇一摇抽奖的H5制作思路
- linux 驱动 device,driver ,bus 关系
- 戴记严选GM3323D 鼠标左右键失效 解决办法
- 作文 深海机器人_作文机器人(共5篇)
- Android 头像上传的实现
- 李章洙:受伤的老虎更凶猛
- Hack the box靶机 Grandpa