zoukankan      html  css  js  c++  java
  • SuperMap iServer&iPortal&iEdge结合CAS 5.3服务器实现单点登录

    一、本例环境说明

    • 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.3pom.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.3srcmain esourcesservicesHTTPSandIMAPS-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.3srcmain esourcesapplication.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 执行构建脚本

    .uild.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-zipwebappsiportalWEB-INFshiro.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-zipwebappsiportalWEB-INFshiro.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/ 如发现有错,请留言,谢谢)

  • 相关阅读:
    爬虫框架概述
    Django【进阶篇 】
    Django【基础篇】
    【tornado】系列项目(二)基于领域驱动模型的区域后台管理+前端easyui实现
    刷题记录:[安洵杯 2019]easy_serialize_php
    刷题记录:[SWPU2019]Web1
    2019-2020-1 20175210 20175211 20175219 实验五 通讯协议设计
    2019-2020-1 20175210 20175211 20175219 实验三 实时系统
    2019-2020-1 20175210 20175211 20175219 实验四 外设驱动程序设计
    2019-2020-1 20175210 20175211 20175219 实验二 固件程序设计
  • 原文地址:https://www.cnblogs.com/zhangyongli2011/p/15166254.html
Copyright © 2011-2022 走看看