cas架构如下,分为客户端和服务端两大部分
启用了cas的应用程序,通过cas支持的协议与服务端通信
cas服务端是建立在spring上的Java servlet,用于验证用户身份,通过签发和验证票据来授予应用访问权限
cas服务器由以下三个部分组成
cas官方不建议拉取源码自己构建,而是推荐我们通过war overlay的形式来构建我们的cas服务。
war overlay是一种对抗重复代码或资源的策略,我们可以通过war overlay来插入或覆盖原版cas应用程序中的特定行为,这种方式有以下几个优点
参考maven官网的简介Apache Maven WAR Plugin – Overlays
cas initializr基于spring initializr,用于快速构建一个cas的war overlay项目(类似与spring boot的创建过程,直接指定需要的组件和版本即可)
可以通过以下三种途径获取war overlay项目,具体参考CAS - WAR Overlay Initializr (apereo.github.io)
git下载指定版本的cas-overlay-template 我选择5.3版本,因为6.0及以后版本都是使用的gradle作为编译工具了,而之前的都是使用maven
下载解压后,导入idea,目录结构如下
下载依赖后,项目目录下会生成一个overlays的目录
windows系统的话在项目目录下执行.\build.cmd package,linux执行.\build.sh package就会在目录下生成war包了,或者直接执行maven的package也可以,因为build.cmd中,package指令也是执行了maven的package指令
在项目根目录下建立src/main/java 和src/main/resources文件夹,覆盖和扩展的配置及方法都放在这两个文件夹下,后面会详细展开说一下常用的配置
将overlays目录下的application.properties和文件复制到我们自己建立的resources目录下
移动到这里
修改log4j2.xml的日志存放路径为自己的路径,文件默认是按照linux的配置,需要改成windows的路径
报错如下:
"Caused by: java.lang.NullPointerException: Cannot invoke "org.apache.commons.lang3.JavaVersion.atLeast(org.apache.commons.lang3.JavaVersion)" because "org.apache.commons.lang3.SystemUtils.JAVA_SPECIFICATION_VERSION_AS_ENUM" is null"
这是因为项目的commons-lang3版本低,而本地有安装了java11导致的,在maven中添加配置如下
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
报错如下
java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlElement
这是因为我本地安装了java11,但是cas的5.3版本使用的java8,缺失了一些库
在pom文件中添加依赖即可
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
启动成功后,页面如下
输入application.properties中配置的默认用户名密码
登录成功
点击登出