业务系统对接CAS
- 启动类加@EnableCasClient
<!--cas客户端-->
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>1.7.0-GA</version>
</dependency>
<dependencies>
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-support-springboot</artifactId>
<version>3.6.3</version>
</dependency>
</dependencies>
//配置文件加入以下配置
cas:
server-url-prefix: https://testsso.com/cas #cas前缀
server-login-url: https://testsso.com/cas/login #cas登录地址
client-host-url: http://localhost:8800 #业务系统地址
//Ticket校验器 支持三种 CAS, CAS3, SAML。 cas,只能返回当前用户名。cas3,返回attributes信息。
validation-type: CAS3
authentication-url-patterns: /casAuth #设置过滤的url地址 认证url,默认*
//是否启用单点登出,默认true
single-logout.enabled
//校验url,默认 /*
validation-url-patterns
# 对url 进行包装,之后就可在request中获取到用户信息,默认*
request-wrapper-url-patterns
public Response backLogin(HttpServletRequest request){
//获取cas信息:
Object constCasAssertion = request.getSession().getAttribute("_const_cas_assertion_");
Assertion assertion=(Assertion) constCasAssertion;
//获取公开唯一标识属性
String casName = assertion.getPrincipal().getName();
//获取公开的Attributes部分
Map<String, Object> attributes = assertion.getPrincipal().getAttributes();
}
2.配置casConfig
@Configuration
public class CasConfig{
@Value("${cas.casServerUrlPrefix:https://sso.com/cas}")
private String casServerUrlPrefix;
@Value("${cas.casServerUrlPrefix:https://sso.com/cas/login}")
private String casServerLoginUrl;
@Value("${cas.serverName:http://xxx:8800}")
private String serverName;
/**
*将未携带票据与会话中无票据的请求都重定向到CAS登录地址
*/
@Bean
@Order(1)
public FilterRegistrationBean<AuthenticationFilter> casAuthenticationFilter() {
FilterRegistrationBean<AuthenticationFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new AuthenticationFilter());
registration.setName("CAS Authentication Filter");
Map<String, String> initParams = new HashMap<>();
initParams.put("casServerUrlPrefix", casServerUrlPrefix); // CAS服务端地址
initParams.put("casServerLoginUrl", casServerLoginUrl); // CAS登录地址
initParams.put("serverName", serverName); // 本地地址
registration.setInitParameters(initParams);
registration.addUrlPatterns("/dmeeting/casAuth");
return registration;
}
/**
* 向CAS服务端发起校验票据请求
*/
@Bean
@Order(2)
public FilterRegistrationBean<Cas30ProxyReceivingTicketValidationFilter> cas30TicketValidationFilter() {
FilterRegistrationBean<Cas30ProxyReceivingTicketValidationFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new Cas30ProxyReceivingTicketValidationFilter());
registration.setName("CAS30 Ticket Validation Filter");
Map<String, String> initParams = new HashMap<>();
initParams.put("casServerUrlPrefix", casServerUrlPrefix); // CAS服务端地址,会拼接为服务校验地址
initParams.put("serverName", serverName);
registration.setInitParameters(initParams);
registration.addUrlPatterns("/*");
return registration;
}
/**
*CAS登录成功的信息存入请求中
*/
@Bean
@Order(3)
public FilterRegistrationBean<HttpServletRequestWrapperFilter> httpServletRequestWrapperFilter() {
FilterRegistrationBean<HttpServletRequestWrapperFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new HttpServletRequestWrapperFilter());
registration.setName("HttpServletRequest Wrapper Filter");
registration.addUrlPatterns("/*");
// 设定加载的顺序
//registration.setOrder(3);
return registration;
}
}
3.cas的restFul协议访问
cas支持rest协议方式进行访问,格式和参数如下:
1. 获取TGT
请求方式,路径,http协议及请求参数:
POST /cas/v1/tickets HTTP/1.0
username=xxx&password=pwd&additionalParam1=paramvalue
请求响应
201 Created
Location: http://xxx.com/cas/v1/tickets/{TGT id}
2. 获取ST //service必须编码,否则会报错:票根XXX 不符合目标服务
请求方式,路径,http协议及请求参数:
POST /cas/v1/tickets/{TGT id} HTTP/1.0
service={form encoded parameter for the service url}
请求响应
200 OK
ST-1-FFDFHDSJKHSDFJKSDHFJKRUEYREWUIFSD2132
3. 校验ST
请求方式及请求路径
GET /cas/p3/serviceValidate?service={service url}&ticket={service ticket}
请求响应
状态码,200成功;200请求失败;415不支持的媒体类型;502网络代理资源问题
4. 登出
请求方式,请求路径和http协议
DELETE /cas/v1/tickets/{TGT} HTTP/1.0
请求响应
返回注销的TGT
业务系统对接CAS的更多相关文章
- 基于IdentityServer的系统对接微信公众号
业务需求 公司有两个业务系统,A和B,AB用户之间属于多对一的关系,数据库里面也就是两张表,A表有个外键指向B.现在需要实现以下几个功能. A用户扫描B的二维码,填写相关的注册信息,注册完成之后自动属 ...
- 统一门户与业务系统的sso整合技术方案(单点登录)
一.单点登录(SSO,Single Sign On)整合目前计划接入统一门户的所有业务系统均为基于JavaEE技术的B/S架构系统.由于统一门户的单点登录技术选用的是JA-SIG组织开发的Cas Se ...
- 系统对接API调用
在与公司外部系统对接时,API接口一般采用REST风格,对外暴露HTTP服务.只需要将入参封装好,并发起HTTP请求即可.具体请求流程如下图所示: 数据格式 API调用参数分为系统参数和业务参数,请求 ...
- 领域驱动设计(DDD)在美团点评业务系统的实践
前言 至少 30 年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans 将其定义为领域驱动设计(Domain-Driven Design,简称 DDD).在 ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 几十套业务系统集中统一授权管理实现经验分享
由于这几年互联网电商的快速发展,快递公司也进入了快速发展的绝好快速成长期.随着社会的强劲需求公司的业绩年年攀新高.快速发展的公司都需要有强大的IT信息系统,硬件设备基本上款到了货也可以到了,但是软件系 ...
- 业务系统的JVM启动参数推荐
关键业务系统的JVM启动参数推荐,原文链接请参见:http://calvin1978.blogcn.com/articles/jvmoption-2.html
- 银行综合储蓄业务系统,水平为学了一年C语言
银行综合储蓄业务系统 #include <stdio.h> #include<string.h> int acccunt = 0; char name[10],pw[10]; ...
- 业务系统需要什么样的ID生成器
业务系统需要什么样的ID生成器 ID 生成器在微博我们一直叫发号器,微博就是用这样的号来存储,而我微博里讨论的时候也都是以发号器为标签.它的主要目的确如平常大家理解的“为一个分布式系统的数据objec ...
- 通过业务系统的重构实践DDD
最近新接了一个业务系统——社区服务系统,为了快速熟悉和梳理老系统的业务逻辑和代码,同时对老系统代码做一些优化,于是打算花上一个月时间不间断地对老系统服务进行重构.同时,考虑到社区业务的复杂性,想起了之 ...
- Finance财务软件(引入业务系统凭证专题)
我们通过自定义存储过程从业务系统引入凭证 我们需要以下适配 1.设置业务系统数据库链接 2.在自定义模板中设置存储过程名称及入参,这里的功能键值必须为_InterfaceExec,保留字段作为存储过程 ...
随机推荐
- (一).JavaScript的简介,变量,数据类型,运算符和表达式
1. JavaScript的简介 1.1 JavaScript概念 JavaScript是一门:动态的 弱类型的 解释型 的脚本语言 1. 动态: 程序执行的时候才确定数据类型 2. 弱类型:数据类型 ...
- vscode工程目录文件及文件夹摘选
在工程工作区下新建一个.vscode 文件夹中并新建一个名为"settings.json"的文件,然后在 settings.json 中输入如下内容: { "search ...
- Matlab %壹
第一章 基本操作 MATLAB as A Calculator operators: + - * / ^ 顺序: Parenthesis () Power (^) *or/ +or- 特殊的: sqr ...
- Hadoop服务启动失败
Hadoop服务启动失败今天启动Hadoop时,终端报了一个新的错误 ```bashStarting namenodes on [192.168.19.128]192.168.19.128: ssh: ...
- .Netcore webApi 注入socket 与客户端交互
模拟服务端 private string TcpServiceControl(string value) { // 1.按照模拟工具上看 先new一个tcp服务 Socket serverSocket ...
- k8s ingress
ingress ingress为k8s集群中的服务提供了入口,可以提供复制均衡,ssl终止和基于名称的虚拟主机,再生产环境中,常用的ingress有Treafik,Nginx,HAProxy,Is ...
- python print 一个进度条
import time scale=100 print("执行开始".center(scale+28,'-')) start = time.perf_counter() for i ...
- Vscode 界面语言换成中文
作为编译器,Visual Studio Code是非常多能化的,但是界面英文对于我这种菜鸟新手造成了很大的困扰. 所以切换成中文更方便. Ctrl+shift+x 在左侧出现"扩展&qu ...
- 1 关于win10原生系统下 OCRmyPDF安装使用
win10原生系统下 OCRmyPDF安装使用长期以来一直在代替freepic2pdf的工具,因为在图片转化PDF时,如果没有勾选该软件 添加OCR层 选项,印象中事后无法挂OCR层上去.福昕风腾,A ...
- Python 3 os.walk读取指定文件路径后,打印路径参数为空
今天有时间自己尝试了一下os.walk的小实验,结果出现了一个小问题:在交互模式下,运行我的python脚本,没有打印任何内容 返回去看一下test.py内容 返回去看一下文件路径是否正确: 看着好像 ...