SuperMap iServer&iPortal&iEdge结合CAS 5.3服务器实现单点登录
2023-10-19 更新,由于阿里云maven镜像仓库里缺失了很多CAS5.3 依赖,如果缺少可以用附件里的同步到本地仓库 链接:https://pan.baidu.com/s/14DhRci_AmivA8DCZ6Sx1wg?pwd=58d2 提取码:58d2
一、本例环境说明
- JDK 1.8
- CAS 5.3
- apache-maven-3.6.0
- mysql-5.6.32
- SuperMap iServer 10.1.3
- SuperMap iPortal 10.1.3
二、CAS 5.3基础环境搭建与验证
需要参考《CAS 5.3服务器搭建》搭建好环境,并使用系统默认用户名密码验证通过。
三、CAS 5.3结合MySQL配置
需要参考《CAS 5.3使用MySQL数据库登录》,并使用MySQL数据库中自定义用户名与密码验证通过。
四、CAS 5.3 配置SuperMap所需依赖
4.1 增加CAS的maven依赖
修改cas-overlay-template-5.3\pom.xml文件
<!--SuperMap需要-->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-saml</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-json-service-registry</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-core-authentication-attributes</artifactId>
<version>${cas.version}</version>
</dependency>

解释说明:
- cas-server-support-saml,iServer (或 iPortal、iEdge) 和 CAS 之间遵循 SAML1.1 协议以实现票证验证响应,因此 CAS 需包含上述依赖来启用对 SAML1.1 的支持
- cas-server-support-json-service-registry,CAS 以 JSON 格式注册服务,因此需要包含 JSON 依赖包来实现对 JSON 的支持
- cas-server-core-authentication-attributes,iServer (或 iPortal、iEdge) 与 CAS 之间实现票证验证响应时,需要获取代表角色的字段(自建user表中的 role 字段)来验证拥有权限的类型,因此需要增加属性返回依赖包
4.2 增加CAS的HTTPSandIMAPS-10000001.json配置
修改cas-overlay-template-5.3\src\main\resources\services\HTTPSandIMAPS-10000001.json文件,增加以下
"accessStrategy" : {
"@class" : "org.apereo.cas.services.DefaultRegisteredServiceAccessStrategy",
"enabled" :true,
"ssoEnabled": false
},
"attributeReleasePolicy" : {
"@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
}

4.3 修改CAS自定义application.properties配置
打开cas-overlay-template-5.3\src\main\resources\application.properties文件,增加以下配置
#设置服务注册配置文件位置
cas.serviceRegistry.json.location=classpath:/services
#开启单行属性
cas.authn.attributeRepository.jdbc[0].singleRow=true
#设置数据库表和cas服务器之间查询结果的映射关系,具体与数据库的字段名为准
cas.authn.attributeRepository.jdbc[0].attributes.username=login_name
cas.authn.attributeRepository.jdbc[0].attributes.password=password
cas.authn.attributeRepository.jdbc[0].attributes.role=role
cas.authn.attributeRepository.jdbc[0].order=0
#返回所有属性
cas.authn.attributeRepository.jdbc[0].requireAllAttributes=true
#查询所有属性字段的SQL语句
cas.authn.attributeRepository.jdbc[0].sql=SELECT * FROM user WHERE {0}
#指定上面的SQL查询条件
cas.authn.attributeRepository.jdbc[0].username=login_name
#数据库连接
cas.authn.attributeRepository.jdbc[0].url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
#数据库用户名
cas.authn.attributeRepository.jdbc[0].user=root
#数据库用户密码
cas.authn.attributeRepository.jdbc[0].password=自己Mysql的密码
#数据库驱动
cas.authn.attributeRepository.jdbc[0].driverClass=com.mysql.jdbc.Driver
解释说明:
- cas.authn.attributeRepository.jdbc[0].attributes.XXX为固定写法,后面值则为数据库表中的字段名称,下图为数据库表字段

- cas.authn.attributeRepository.jdbc[0].sql 参数只是 CAS 查询数据库时使用到的 SQL 语句,自由性很大,使用其它正确的查询语句也是可行的。
4.4 执行构建脚本
.\build.cmd run

五、SuperMap iServer/iEdge配置与验证
(SuperMap iEdge 配置方式与iServer相同,以下使用iServer进行配置验证)
5.1 访问SuperMap iServer首页
浏览器访问http://localhost:8090/iserver
点击右上角登录按钮,使用管理员账户进行登录

5.2 在SuperMap iServer中配置CAS信息
1)点击安全->CAS登录配置,勾选可用,填写数据库用户表中权限role字段与CAS登录地址进行保存

2)将数据库中的管理员角色添加映射,点击“添加属性角色配置”按钮

3)属性值填写数据库中role字段,并将ADMIN权限添加到右侧

4)添加完成后的结果如下

5.3 点击当前登录用户名,选择退出当前用户

5.4 重新点击右上角登录按钮

5.5 选择“使用CAS账号登录”

5.6 输入MySQL中user里自定义管理员权限的用户名和密码

5.7 登录成功会自动跳转

5.8 右上角点击我的账户,查看权限,完成单点登录功能

至此,SuperMap iServer已成功集成CAS实现单点登录功能。
六、SuperMap iPortal配置与验证
6.1 访问SuperMap iPortal首页
浏览器访问http://localhost:8190/iportal
点击右上角登录按钮,使用管理员账户进行登录

6.2 在SuperMap iPortal中配置CAS信息
1)登录成功后,点击管理按钮进入iPortal管理页面

2)进入“安全”-> "CAS登录配置",启用CAS,填写数据库用户表中权限role字段与CAS登录地址进行保存

3)选择属性角色关联信息配置

4)点击添加角色按钮

5)属性值填写数据库中role字段,并将ADMIN权限添加到右侧,最后添加按钮

6)添加完成后的结果如下

6.3 点击当前登录用户名,选择退出当前用户

6.4 配置iPortal的shiro.ini文件
打开在supermap-iportal-10.1.3-win64-zip\webapps\iportal\WEB-INF\shiro.ini文件中增加以下2个参数,增加位置与我相同(因为有变量引用关系)
casRealm = com.supermap.iportal.security.IportalCasRealm
casRealm.backRealm = $usernamepasswordrealm

6.5 修改为shiro.ini文件后,重启SuperMap iPortal 服务
6.6 重新点击右上角登录按钮

6.7 选择“CAS 登录”

6.8 输入MySQL中user里自定义管理员权限的用户名和密码

6.9 登录成功会自动跳转

至此,SuperMap iPortal已成功集成CAS实现单点登录功能。
七、注意事项
7.1 SuperMap iServer CAS 可以正常登录,但是没有权限

产生原因是,CAS的application.properties中cas.authn.attributeRepository.jdbc[0]没有增加数据库联系信息
附上完整配置信息
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
#设置服务注册配置文件位置
cas.serviceRegistry.json.location=classpath:/services
# 查询账号密码SQL,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from user where login_name=?
# 指定上面的SQL查询字段名(必须)
cas.authn.jdbc.query[0].fieldPassword=password
# 数据库连接
cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
# 数据库用户名
cas.authn.jdbc.query[0].user=root
# 数据库用户密码
cas.authn.jdbc.query[0].password=自己Mysql的密码
# 数据库驱动
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
#单行属性
#开启单行属性
cas.authn.attributeRepository.jdbc[0].singleRow=true
#设置数据库表和cas服务器之间查询结果的映射关系,具体与数据库的字段名为准
cas.authn.attributeRepository.jdbc[0].attributes.username=login_name
cas.authn.attributeRepository.jdbc[0].attributes.password=password
cas.authn.attributeRepository.jdbc[0].attributes.role=role
cas.authn.attributeRepository.jdbc[0].order=0
#返回所有属性
cas.authn.attributeRepository.jdbc[0].requireAllAttributes=true
#查询所有属性字段的SQL语句
cas.authn.attributeRepository.jdbc[0].sql=SELECT * FROM user WHERE {0}
#指定上面的SQL查询条件
cas.authn.attributeRepository.jdbc[0].username=login_name
#数据库连接
cas.authn.attributeRepository.jdbc[0].url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
#数据库用户名
cas.authn.attributeRepository.jdbc[0].user=root
#数据库用户密码
cas.authn.attributeRepository.jdbc[0].password=自己Mysql的密码
#数据库驱动
cas.authn.attributeRepository.jdbc[0].driverClass=com.mysql.jdbc.Driver
7.2 SuperMap iPortal CAS 可以正常登录,但是没有权限
产生原因是iPortal的shiro.ini文件配置有误或者没有配置
打开在supermap-iportal-10.1.3-win64-zip\webapps\iportal\WEB-INF\shiro.ini文件中增加以下2个参数,增加位置与我相同(因为有变量引用关系)
casRealm = com.supermap.iportal.security.IportalCasRealm
casRealm.backRealm = $usernamepasswordrealm

7.3 CAS登录提示“CAS的服务记录是空的,没有定义服务。希望通过CAS进行认证的应用程序必须在服务记"
产生原因是application.properties中缺少注册配置文件位置,增加以下配置,并重启CAS
#设置服务注册配置文件位置
cas.serviceRegistry.json.location=classpath:/services
7.4 为什么配置 CAS 认证服务器后,单点登录认证失败?
如果 CAS 认证服务器和 GIS服务器不在同一台机器上,由于两台机器的时间差,可能导致登录验证不成功,这时需要调整两台机器的时间保持一致,或延长容错时间间隔,iPortal 默认的时间差容限为 3 分钟。修改容错时间差容限的方法是编辑 shiro.ini(WEB-INF 下),修改 casRealm.tolerance 参数(单位为毫秒),修改完成后重启iPortal服务
casRealm.tolerance = 180000
(转发请注明出处:http://www.cnblogs.com/zhangyongli2011/ 如发现有错,请留言,谢谢)
SuperMap iServer&iPortal&iEdge结合CAS 5.3服务器实现单点登录的更多相关文章
- 使用 CAS 在 Tomcat 中实现单点登录 http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/
developerWorks 中国 技术主题 Open source 文档库 使用 CAS 在 Tomcat 中实现单点登录 单点登录(Single Sign On , 简称 SSO )是目前比较流行 ...
- cas 在.net 下的单点登录实现及 ,Net Mvc的接入
最近在研究单点登录,发现用的最广的就是cas了,查了下资料,发现有人写了详细的说明 地址:http://www.cnblogs.com/zhenyulu/archive/2013/01/22/2870 ...
- CAS 在 Tomcat 中实现单点登录
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统 中,用户只需要登录一次就可以访问所有相互信任的应用系统.CA ...
- 【IBM】使用 CAS 在 Tomcat 中实现单点登录
来源: IBM Developer http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/ 张 涛 (zzhangt@cn.ibm.com ...
- 使用 CAS 在 Tomcat 中实现单点登录
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.CAS ...
- 抛弃Https让Cas以Http协议提供单点登录服务
本文环境: 1.apache-tomcat-7.0.50-windows-x86 2.cas-server-3.4.11 3.cas-client-3.2.1 将cas-server-webapp-3 ...
- cas sso单点登录系列8_抛弃Https让Cas以Http协议提供单点登录服务
转:http://blog.csdn.net/ycyk_168/article/details/18668951 本文环境: 1.apache-tomcat-7.0.50-windows-x86 2. ...
- 【Java EE 学习 68】【单点登录】【两种单点登录类型:SSO/CAS、相同一级域名的SSO】
单点登录:SSO(Single Sign On) 什么是单点登录:大白话就是多个网站共享一个用户名和密码的技术,对于普通用户来说,只需要登录其中任意一个网站,登录其他网站的时候就能够自动登陆,不需要再 ...
- 【单点登录】【两种单点登录类型:SSO/CAS、相同一级域名的SSO】
单点登录:SSO(Single Sign On) 什么是单点登录:大白话就是多个网站共享一个用户名和密码的技术,对于普通用户来说,只需要登录其中任意一个网站,登录其他网站的时候就能够自动登陆,不需要再 ...
- 采用CAS原理构建单点登录
企业的信息化过程是一个循序渐进的过程,在企业各个业务网站逐步建设的过程中,根据各种业务信息水平的需要构建了相应的应用系统,由于这些应用系统一般是在不同的时期开发完成的,各应用系统由于功能侧重.设计方法 ...
随机推荐
- 再读vue
app.vue是项目的主组件,页面的入口文件 main.js是项目的入口文件 vue.config.js是vue-cli的配置文件//用这个配置代理,端口号 例如 const { defineConf ...
- FP分数规划在无线通信中的应用
更多精彩内容请关注微信公众号 '优化与算法' 前言 在数学优化中,分数规划是线性分式规划的推广.分数规划中的目标函数是两个函数的比值,这两个函数通常是非线性的.要优化的比值通常描述系统的某种效率. 1 ...
- 【Java】Mysql文档生成工具
资料参考: https://blog.csdn.net/weixin_43797561/article/details/122809269 https://blog.csdn.net/qq_33177 ...
- MyBatisPlus公共字段自动填充
公共字段自动填充 公共字段 新增员工,修改.编辑员工信息时,都需要设置创建时间,修改时间等操作,这些操作过于重复.繁琐,为了有更快捷高效的,MyBatisPlus提供了公共字段自动填充功能,当我们执行 ...
- 从.net开发做到云原生运维(五)——云原生时代绕不开的Kubernetes
1. 前言 前面的几篇文章主要是讲.net技术栈里的web开发技术,只是单纯的开发,从一个简单的项目到最后的打包成镜像进行分发. Kubernetes算是开启了一个新时代. 2. Kubernetes ...
- 对国内的人行机器人(humanoid)的一些技术类的提问?
贵公司产品在机器人仿真时具体采用的仿真软件(NVIDIA家的.开源的webot,等等)是哪款,如果没有使用NVIDIA全家桶那么其原因是什么(如:技术依赖没有独立技术.技术栈太过于复杂暂时没有精力和能 ...
- 为什么要使用工业仿真软件? —— CAE(Computer Aided Engineering)工程设计中的计算机辅助工程
CAE技术: 引自: https://baike.baidu.com/item/CAE技术/18884456?fr=ge_ala 引自: https://www.mscsoftware.com.cn/ ...
- Long Way to be Non-decreasing 题解
前言 题目链接:洛谷:CF. 题意简述 yzh 喜欢单调不降序列. 她有一个序列 \(a\),最初为 \(a_1, \ldots, a_n\),其中每个元素都在 \([1, m]\) 内. 她希望使序 ...
- 文件IO常用的函数接口
本文归纳整理了常用的文件IO常见的函数接口及其用法,以供读者查阅 目录 打开文件 fopen 关闭文件 fclose 数据读取 字符读取:fgetc.getc.getchar 按行读取:fgets.g ...
- 开源的 P2P 跨平台传文件应用「GitHub 热点速览」
就在上周,发完那篇文章之后不久,我就有幸获得了 GitHub Models 服务公测的访问权限,所以就体验了一下 Playground 聊天功能. 起初,我以为这是"微软菩萨"降临 ...