cas5.2 gradle mysql_CAS 5.2.x 单点登录 - 搭建服务端和客户端

本文介绍了如何搭建CAS 5.2.x单点登录服务端和客户端。首先讲解了SSO的定义和CAS系统结构,然后详细阐述了服务端的Gradle Overlay构建过程,包括环境配置、WAR Overlay概念、IDEA工程配置、Tomcat启动及SSL配置。接着,文章展示了如何注册服务,创建JSON服务定义文件,并配置服务注册加载。最后,介绍了客户端配置,修改web.xml以重定向至CAS服务器,实现了单点登录效果。
摘要由CSDN通过智能技术生成

一、简介

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

CAS 是一个开源的企业级单点登录系统,目前最新版本为 5.2.x。

CAS 包含两个部分:CAS Server 和 CAS Client,它们之间独立部署。CAS 客户端拦截未认证的用户请求,并重定向至 CAS 服务端,由 CAS 服务端对用户身份进行统一认证。

二、搭建服务端

对于本地搭建 CAS 服务端,官方提供了基于 Maven 和 Gradle 的 Overlay 构建方式,本文用的是 CAS Maven WAR Overlay。

2.1 什么是 WAR Overlay?

Overlay 技术可以把多个项目 war 合并成为一个项目,如果项目存在同名文件,那么主项目中的文件将覆盖掉其他项目的同名文件。

使用 Overlay 无需对 CAS 源码进行编译,也避免了对 CAS 源码进行侵入性改造。

2.2 环境清单

JDK 1.8

Tomcat 8.0+

IntelliJ IDEA 2017.2

2.3 Overlay 构建

下载 CAS Maven WAR Overlay,修改 pom.xml ,设置 CAS 版本为 5.2.2。建议去除掉 pom.xml 文件中的 wrapper-maven-plugin 和无用的 profile 配置。

5.2.2

首次导入 IDEA,可以看到后台正在下载官方 cas.war。

6d2584baed97b81fba5a9603eccb5546.png

工程 overlays 目录下的文件是由 maven 编译后才产生的,可以在 pom.xml 中配置官方 cas.war 中的文件的那些文件可以排除,不要在 overlays 中生成:

org.apache.maven.plugins

maven-war-plugin

2.6

cas

false

false

false

${manifestFileToUse}

org.apereo.cas

cas-server-webapp${app.server}

WEB-INF/classes/services/*

WEB-INF/classes/application.*

打开 Project Structure,可以观察到该工程具有两个 Web Root,但是 src/main/webapp 目录并不存在,需要进行手动创建。

aa132b561c7d6cb07eaf79d9018eb534.png

拷贝 overlays 目录下的 application.properties 配置文件至 resources 目录,用于覆盖 CAS WAR 中的同名文件。最终工程目录结构如下:

7e1bfaaaef8f033a06a563b30983c961.png

为工程配置 tomcat 8.0 并启动,注意 CAS 5.2.x 不支持低于 tomcat 8.0 的版本。

看到控制台打印 READY 表明启动成功。

815304179850bf01cb428df466a2bc46.png

访问 http://localhost:8080/cas/login 进入登录界面。

8c030362d3df7ba34f11fe40dd4656df.png

其中Non-secure Connection提示需要配置 SSL,Static Authentication提示需要对用户配置进行修改,可以修改为 JDBC、REST 等方式。目前用户配置写死在 application.properties 配置文件中,用户名为 casuser,密码为 Mellon。

##

# CAS Authentication Credentials

#

cas.authn.accept.users=casuser::Mellon

2.4 Services配置

客户端接入 CAS 首先需要在服务端进行注册,否则客户端访问将提示“未认证授权的服务”警告:

6db3a25ea5b446ff54838b089c7432aa.png

在 resources 文件夹下创建 services 文件夹进行服务定义,该目录中可包含多个 JSON 文件,其命名必须满足以下规则:

JSON fileName = serviceName + "-" + serviceNumericId + ".json"

创建 services/Localhost-10000003.json 文件,表示允许所有以 http://localhost 开头的认证请求:

{

"@class": "org.apereo.cas.services.RegexRegisteredService",

"serviceId": "^(http)://localhost.*",

"name": "本地服务",

"id": 10000003,

"description": "这是一个本地允许的服务,通过localhost访问都允许通过",

"evaluationOrder": 1

}

@class:必须为org.apereo.cas.services.RegisteredService的实现类

serviceId:对服务进行描述的表达式,可用于匹配一个或多个 URL 地址

name: 服务名称

id:全局唯一标志

evaluationOrder:定义多个服务的执行顺序

最后,根据官方文档-service-registry,还需修改 application.properties 文件告知 CAS 服务端从本地加载服务定义文件:

#开启识别json文件,默认false

cas.serviceRegistry.initFromJson=true

#自动扫描服务配置,默认开启

#cas.serviceRegistry.watcherEnabled=true

#120秒扫描一遍

#cas.serviceRegistry.repeatInterval=120000

#延迟15秒开启

#cas.serviceRegistry.startDelay=15000

#资源加载路径

#cas.serviceRegistry.config.location=classpath:/services

启动时打印以下日志,说明服务注册成功。

2018-03-18 23:36:08,660 INFO [org.apereo.cas.services.AbstractServicesManager] -

2018-03-18 23:36:08,876 INFO [org.apereo.cas.config.CasServiceRegistryInitializationConfiguration] -

2018-03-18 23:36:08,877 WARN [org.apereo.cas.services.ServiceRegistryInitializer] -

2018-03-18 23:36:09,283 INFO [org.apereo.cas.services.AbstractServicesManager] -

三、搭建客户端

在官方文档中提供了 CAS Java 客户端样例,即 cas-sample-java-webapp。

修改 pom.xml,修改 tomcat7-maven-plugin 设置访问地址为http://localhost:8181/node1:

org.apache.tomcat.maven

tomcat7-maven-plugin

2.2

8181

UTF-8

tomcat7

/node1

CAS Client 通过拦截器将未认证的请求重定向到 CAS Server,这里对 cas-sample-java-webapp 的 web.xml 文件进行修改,将服务端、客户端地址替换为实际测试的地址:

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

CAS Single Sign Out Filter

org.jasig.cas.client.session.SingleSignOutFilter

casServerUrlPrefix

http://localhost:8080/cas

org.jasig.cas.client.session.SingleSignOutHttpSessionListener

CAS Authentication Filter

org.jasig.cas.client.authentication.AuthenticationFilter

casServerLoginUrl

http://localhost:8080/cas/login

serverName

http://localhost:8181/node1

CAS Validation Filter

org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter

casServerUrlPrefix

http://localhost:8080/cas

serverName

http://localhost:8181/node1

redirectAfterValidation

true

useSession

true

authn_method

mfa-duo

CAS HttpServletRequest Wrapper Filter

org.jasig.cas.client.util.HttpServletRequestWrapperFilter

CAS Single Sign Out Filter

/*

CAS Validation Filter

/*

CAS Authentication Filter

/*

CAS HttpServletRequest Wrapper Filter

/*

index.jsp

此时访问

http://localhost:8181/node1

会跳转至

http://localhost:8080/cas/login?service=http%3A%2F%2Flocalhost%3A8181%2Fnode1%2F

输入用户信息,登录成功,返回

http://localhost:8181/node1/;jsessionid=6628138DCAAA5BA3481CD4C9238FEBFF

f120db3f3a198582036e485b266af2bd.png

利用相同的方法配置第二个客户端,访问地址为http://localhost:8282/node2,可知在 node1 登录成功的情况下,无需再次输入用户密码即可访问 node2 后台页面。

至此,开发环境搭建完毕。由于客户端只是对 web.xml 中的过滤器进行配置,可以很方便地集成到各个业务系统中。

转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值