CAS服务端入门使用实践

CAS服务端入门使用实践

一、前言

1.简介

CAS 是一个企业多语言单点登录解决方案,支持大量附加身份验证协议和功能,满足身份验证和授权需求的综合平台。

2.环境

  • Windows 10
  • JDK 1.8
  • git version 2.41.0.windows.3
  • Tomcat 9.0.78
  • Maven 3.5.3
  • cas-overlay-template-5.3

CAS Home:https://apereo.github.io/cas

cas-overlay-template - GitHub:https://github.com/apereo/cas-overlay-template/tree/5.3

REST-Protocol:https://apereo.github.io/cas/development/protocol/REST-Protocol.html

Tomcat 9:https://tomcat.apache.org/download-90.cgi

Anumbrella - CAS 专栏:https://blog.csdn.net/anumbrella/category_7765386.html

Shuyun123 - GitHub:https://github.com/Shuyun123/CAS

二、使用实践

1.编译项目

  • 下载项目:https://github.com/apereo/cas-overlay-template/tree/5.3
  • 解压 cas-overlay-template-5.3.zip
  • 进入文件夹 cas-overlay-template-5.3

第一种编译:

  • 使用 Git 命令窗口

  • 右击 - Open Git Bash here

./build.sh package

第二种编译:

  • CMD 窗口
build.cmd package
  • CAS 编译后的目录:cas-overlay-template-5.3\target\cas

2.部署项目

  • 下载 Tomcat 9:https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.78/bin/apache-tomcat-9.0.78.zip

  • 解压 Tomcat

  • 将 target 文件夹下的 cas 文件夹拷贝到 Tomcat 中:apache-tomcat-9.0.78\webapps

在这里插入图片描述

  • 注意:JDK 版本是1.8

  • 启动 Tomcat:双击 apache-tomcat-9.0.78\bin\startup.bat

  • 浏览器访问:http://127.0.0.1:8080/cas

  • 默认账号密码:casuser::Mellon

  • 默认账号密码配置文件:

    cas-overlay-template-5.3\target\cas\WEB-INF\classes\application.properties

在这里插入图片描述

3.配置HTTPS

  • 登录页面的黄色背景提示内容:
非安全连接
您当前正在通过非安全连接访问 CAS。单点登录不起作用。为了进行单点登录,您必须通过 HTTPS 登录。

1)生成密钥

  • JDK 的 bin 目录下执行

  • 记住密码,导出证书需要使用

  • 您的名字与姓氏是什么,填写域名,例如:test.org

keytool -genkey -alias mycacerts -keyalg RSA -keystore  D:/ssh-key/keycard

在这里插入图片描述

2)导出证书

  • JDK 的 bin 文件夹下执行
keytool -export -file D://ssh-key/keycard.crt -alias mycacerts -keystore D:/ssh-key/keycard

3)Tomcat配置HTTPS

  • 编辑 apache-tomcat-9.0.78\conf\server.xml

  • 新增 8443 端口的 HTTPS 配置

  • 修改具体的密钥路径和密钥库口令(与生成密钥时相同)

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true"
               maxParameterCount="1000"
			   scheme="https" secure="true" clientAuth="false" sslProtocol="TLS"
			   keystoreFile="D:/ssh-key/keycard"   
			   keystorePass="123456"
               >
</Connector>

4)配置 hosts 文件

  • 编辑 C:\Windows\System32\drivers\etc\hosts
  • 与生成密钥时相同
127.0.0.1 test.org

5)测试

  • 关闭科学上网软件(无则忽略)

  • 浏览器访问:https://test.org:8443/cas

在这里插入图片描述

4.未认证授权的服务

  • 客户端跳转提示:
未认证授权的服务
CAS的服务记录是空的,没有定义服务。 希望通过CAS进行认证的应用程序必须在服务记录中明确定义。

(1)编辑 cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json

  • 加入 http 的支持
{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|imaps|http)://.*",
  "name" : "HTTPS and IMAPS",
  "id" : 10000001,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000
}

(2)编辑 cas\WEB-INF\classes\application.properties

#是否开启json识别功能,默认为false
cas.serviceRegistry.initFromJson=true
#忽略https安全协议,使用 HTTP 协议
cas.tgc.secure=false

5.二次开发

1)登录认证方式

认证方式依赖包
白名单cas-server-support-generic
黑名单
JDBC 认证
Shiro 认证cas-server-support-shiro-authentication
Rest 认证cas-server-support-rest-authentication
自定义登录认证cas-server-core-authentication-api
cas-server-core-configuration-api

2)修改CAS服务端登录界面

(1)隐藏头部和底部

  • 编辑:cas\WEB-INF\classes\templates\layout.html
<body>
<!-- <div th:replace="fragments/header :: header">
    <a href="fragments/header.html">Header</a> fragment will go here
</div> -->

<main role="main" class="container mt-3 mb-3">
    <div layout:fragment="content" id="content">
        CAS content will go here
    </div>
</main>

<!-- <div th:replace="fragments/footer :: footer">
    <a href="fragments/footer.html">Footer</a> fragment will go here
</div> -->

<script th:replace="fragments/scripts"/>
</body>

(2)隐藏右侧 Links to CAS Resources

  • 编辑:cas\WEB-INF\classes\templates\casLoginView.html
<body class="login">
<main role="main" class="container mt-3 mb-3">
    <div layout:fragment="content" class="row">
        <div class="col-md">
            <div th:replace="fragments/loginform :: loginform"><a href="fragments/loginform.html">Login Form goes
                here</a></div>
        </div>
        <div id="notices" class="col-md mt-3 mt-md-0">
            <!-- <div th:replace="fragments/insecure :: insecure"><a href="fragments/insecure.html">insecure alert goes
                here</a></div>
            <div th:replace="fragments/defaultauthn :: staticAuthentication">
                <a href="fragments/defaultauthn.html">defaultAuthn</a>
                fragment
            </div>
            <div th:replace="fragments/cookies :: cookiesDisabled"><a href="fragments/cookies.html">cookies</a> fragment
            </div>
            <div th:replace="fragments/serviceui :: serviceUI"><a href="fragments/serviceui.html">service ui</a> fragment</div>
            <div th:replace="fragments/loginProviders :: loginProviders"><a href="fragments/loginProviders.html">loginProviders</a>
                fragment
            </div>
            <div th:replace="fragments/cas-resources-list :: cas-resource-list">
                <a href="fragments/cas-resources-list.html">cas-resource</a> list fragment
            </div> -->
        </div>
    </div>
</main>
</body>

(3)隐藏登录按钮下的提示

  • 编辑:cas\WEB-INF\classes\templates\fragments\loginform.html
<!-- <div th:replace="fragments/loginsidebar :: loginsidebar" /> -->

(4)登录界面左侧显示图片

  • 拷贝图片到文件夹:cas\WEB-INF\classes\static\images

  • 编辑:cas\WEB-INF\classes\static\css\cas.css

#notices {
  border-color: #008;
  color: #008;
  background-image: url(../images/login_img.png);
}

(5)更换浏览器标签页图标

  • 替换图片文件:cas\WEB-INF\classes\static\favicon.ico

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71715.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC的架构有什么优势?——视图与模型(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

String(字符串)

1、String概述 java.lang.String类代表字符串&#xff0c;Java程序中的所有字符串文字&#xff08;例如“abc”&#xff09;都为此类的对象。 1.1、String的注意点 字符串的内容是不会发生改变的&#xff0c;它的对象在创建后不能被更改。 1.2、总结 String是Java定义好的一个类…

【计算机组成原理】24王道考研笔记——第四章 指令系统

第四章 指令系统 一、指令系统 指令是指示计算机执行某种操作的命令&#xff0c;是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该 机的指令系统&#xff0c;也称为指令集。 指令格式&#xff1a; 1.1分类 按地址码数目分类&#xff1a; 按指令长度分类&…

c#在设计时调试自定义 Windows 窗体控件

private string demoStringValue null; [Browsable(true)] public string DemoString {get{return this.demoStringValue;}set{demoStringValue value;} } 参考链接 在设计时调试自定义控件 - Windows Forms .NET Framework | Microsoft Learnhttps://learn.microsoft.com/z…

小游戏扫雷实现教学(详解)

目录 【前言】 一、模块化程序设计&#xff08;多文件编程&#xff09;介绍 1.概述 2.传统编程的方式 3.模块化程序设计的方法 二、扫雷代码设计思路 三、扫雷代码设计 1.创建菜单函数 2.实现9x9扫雷 3.初始化棋盘 4.打印棋盘 5.随机布置雷的位置 6.排查雷的信息 7.回…

AI绘画网站都有哪些比较好用?

人工智能绘画网站是一种利用人工智能技术进行图像处理和创作的网站。这些绘画网站通常可以帮助艺术家以人工智能绘画的形式快速生成有趣、美丽和独特的绘画作品。无论你是专业的艺术家还是对人工智能绘画感兴趣的普通人&#xff0c;人工智能绘画网站都可以为你提供新的创作灵感…

机器学习笔记:李宏毅chatgpt 大模型 大资料

1 大模型 1.1 大模型的顿悟时刻 Emergent Abilities of Large Language Models&#xff0c;Transactions on Machine Learning Research 2022 模型的效果不是随着模型参数量变多而慢慢变好&#xff0c;而是在某一个瞬间&#xff0c;模型“顿悟”了 这边举的一个例子是&#…

21、stm32使用LTDC驱动LCD

注&#xff1a;本文基于stm32使用FMC驱动SDRAM(IS42S32800G-6BLI)工程继续开发 本例使用安富莱的H743XIH板子驱动LTDC点亮7寸LCD 硬件接线&#xff1a;RGB888 一、cubemx配置 1、LTDC配置 注意此引脚应于上面的硬件接线图一致 2、配置DMA2D 3、背光引脚和触摸引脚 4、时钟…

网络:路由

1. 路由器 路由器工作在三层&#xff0c;每个接口都处于不用的网段中&#xff0c;即不同的广播域。但大多情况下&#xff0c;两台路由器直接相连的接口是同一个广播域&#xff0c;即一个网段。 路由器具有判断网络地址和选择路径的功能&#xff0c;能在多网络互联的环境中&…

聚类与回归

聚类 聚类属于非监督式学习&#xff08;无监督学习&#xff09;&#xff0c;往往不知道因变量。 通过观察学习&#xff0c;将数据分割成多个簇。 回归 回归属于监督式学习&#xff08;有监督学习&#xff09;&#xff0c;知道因变量。 通过有标签样本的学习分类器 聚类和…

R语言APSIM模型高级应用及批量模拟

随着数字农业和智慧农业的发展&#xff0c;基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

第一次PR经历

第一次PR测试地址&#xff1a;https://github.com/firstcontributions/first-contributions说明文档&#xff1a; https://github.com/firstcontributions/first-contributions/blob/main/translations/README.zh-cn.md

无涯教程-Perl - readpipe函数

描述 该函数将EXPR作为命令执行。然后,将输出作为标量文本中的多行字符串返回,或者将行作为列表context中的单个元素返回。 语法 以下是此函数的简单语法- readpipe EXPR返回值 此函数在标量context中返回String,在列表context中返回List。 例 以下是显示其基本用法的示…

python_面向对象基础_数据分析

主要目的 对于文本格式和JSON格式数据进行分析&#xff0c;将其中数据提炼出来绘制折线图。 主要实现步骤 1.设计一个完成对数据的封装 2.设计一个抽象类,定义数据读取相关功能,使用其子类实现具体功能 3.读取文件,生成数据对象 4.进行数据计算 5.绘制图表 定义数据封装类 &…

为什么金鸣识别不做成离线版?

来百度APP畅享高清图片 在众多的用户咨询中&#xff0c;金鸣识别客服常常会被用户问及为何不做成离线版的问题&#xff0c;下面我就在这里跟大伙说说其中的原因吧。 离线版的OCR准确率相对于网络版可能会较低&#xff0c;主要有以下几个原因&#xff1a; 1. 数据量和模型更新…

2023国赛数学建模B题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

【Spring Cloud +Vue+UniApp】智慧建筑工地平台源码

智慧工地源码 、智慧工地云平台源码、 智慧建筑源码支持私有化部署&#xff0c;提供SaaS硬件设备运维全套服务。 前言&#xff1a;互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;从施工现场源头抓起&#xff0c;最大程度的收集人员、安全、环境、材…

c++ static

static 成员 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之为静态成员变量&#xff1b;用 static修饰的成员函数&#xff0c;称之为静态成员函数。静态成员变量一定要在类外进行初始化。 看看下面代码体会一下: //其他类 class …

数据结构---跳表

目录标题 为什么会有跳表跳表的原理跳表的模拟实现准备工作find函数insert函数erase函数 测试效率比较 为什么会有跳表 在前面的学习过程中我们学习过链表这个容器&#xff0c;这个容器在头部和尾部插入数据的时间复杂度为O(1)&#xff0c;但是该容器存在一个缺陷就是不管数据…