Spring Cloud Data Flow整合UAA使用外置数据库和API接口
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶!
1 前言
之前的文章《Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制》介绍了如何用UAA来保护Spring Cloud Data Flow,但使用是内存数据库,重启UAA后就丢失了配置信息。而且需要通过Ruby gem安装uaac命令行工具,有点麻烦,比较不是所有人都会使用Ruby的。
本文将解决这两个问题,问题一通过引入PostgreSQL来解决;问题二通过UAA REST API来解决。
Spring Cloud Data Flow相关文章:
Spring Cloud Data Flow初体验,以Local模式运行
把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试
Spring Cloud Data Flow用Shell来操作,方便建立CICD
被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题
2 连接PostgreSQL数据库
为方便,我们通过Docker来启动PostgreSQL,可以参考《Docker启动PostgreSQL并推荐几款连接工具》,命令如下:
docker run -itd \
--name pkslow-postgres \
-e POSTGRES_DB=pkslow \
-e POSTGRES_USER=pkslow \
-e POSTGRES_PASSWORD=pkslow \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-p 5432:5432 \
postgres:10
配置uaa.yml连接数据库如下:
spring_profiles: default,postgresql
database:
driverClassName: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/pkslow
username: pkslow
password: pkslow
maxactive: 15
maxidle: 10
minidle: 3
removeabandoned: false
logabandoned: true
abandonedtimeout: 300
evictionintervalms: 15000
caseinsensitive: false
配置完成启动UAA,就可以看到PostgreSQL已经自动生成了许多相关的表了。

这些表还是非常有用的,你可以看到一些默认的配置及关联性。表结构和数据是了解逻辑的一个重要入口。
3 通过UAA API配置
之前我们是通过uaac命令来创建客户端、群组和用户等,这次我们不再依赖uaac,而是通过访问Api来操作。要使用之前,我们需要添加Json依赖,否则会报错。如下:
<!--json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
(1)获取admin的Token
我们要进行操作,首先要有admin管理员的账号,默认用户名和密码是admin:adminsecret,获取它的Token命令如下:
curl -v -d "username=admin&password=adminsecret&client_id=admin&grant_type=client_credentials" -u "admin:adminsecret" http://localhost:8080/uaa/oauth/token
UAA服务器则会返回一个很长的Token,我们需要把它记录下来,后续都要使用到它。
(2)创建客户端
一个客户端对应一个应用的鉴权,这里创建一个名叫dataflow的客户端,命令如下:
curl 'http://localhost:8080/uaa/oauth/clients' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1Nxxxxxx' \
-H 'Accept: application/json' \
-d '{
"name" : "dataflow",
"client_id" : "dataflow",
"client_secret" : "dataflow",
"scope" : ["cloud_controller.read", "cloud_controller.write", "openid", "password.write", "scim.userids", "sample.create", "sample.view", "dataflow.create", "dataflow.deploy", "dataflow.destroy", "dataflow.manage", "dataflow.modify", "dataflow.schedule", "dataflow.view"],
"resource_ids" : [ ],
"authorized_grant_types" : [ "password", "authorization_code", "client_credentials", "refresh_token" ],
"redirect_uri" : [ "http://localhost:9393/login" ],
"authorities" : ["uaa.resource", "dataflow.create", "dataflow.deploy", "dataflow.destroy", "dataflow.manage", "dataflow.modify", "dataflow.schedule", "dataflow.view", "sample.view", "sample.create"],
"token_salt" : "m6c6fB",
"autoapprove" : "openid",
"allowedproviders" : [ "uaa", "ldap", "my-saml-provider" ]
}'
注意:Bearer后面是admin的Token,太长这里不贴出来了。
(3)创建群组
群组对应的是权限,只有在群组里的用户,才有相关权限。创建群组的同时,还可以添加用户,指定members就行,这里不添加。命令如下:
curl 'http://localhost:8080/uaa/Groups' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzxxx' \
-d '{
"displayName" : "dataflow.view",
"description" : "dataflow.view"
}'
创建成功后会返回群组UUID,需要记录下来。
(4)创建用户
这里说的用户就是登陆客户端应用的具体用户了,这里创建用户larry,密码为larry,命令如下:
curl 'http://localhost:8080/uaa/Users' -i -X POST \
-H 'Accept: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSxxx' \
-H 'Content-Type: application/json' \
-d '{
"externalId" : "test-user",
"meta" : {
"version" : 0,
"created" : "2020-12-18T15:55:56.465Z"
},
"userName" : "larry",
"name" : {
"formatted" : "Larry Deng",
"familyName" : "Deng",
"givenName" : "Larry"
},
"emails" : [ {
"value" : "larry@pkslow.com",
"primary" : true
} ],
"phoneNumbers" : [ {
"value" : "666666"
} ],
"active" : true,
"verified" : true,
"origin" : "",
"password" : "larry",
"schemas" : [ "urn:scim:schemas:core:1.0" ]
}'
创建成功后会返回用户UUID,需要记录下来。
(5)把用户加到群组里
当群组和用户都创建成功后,就把用户添加到群组中去,这里是通过UUID来关联的,命令如下:
curl 'http://localhost:8080/uaa/Groups/d633a216-029b-4f44-a7e0-15c5fd326ef2/members' -i -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJSUzIxxx' \
-d '{"origin":"uaa","type":"USER","value":"a45a62a1-47ad-4345-bcef-ba12d7fd97e4"}'
URL的是群组UUID,消息体的是用户的UUID。
4 登陆认证
配置完成后,可以查看数据库来认证。当然最直观的还是直接登陆Data Flow来试试:

可以看到,用户larry成功登陆,并且只有只读权限,没有添加、修改等操作功能了。这是因为我们只添加了一个群组dataflow.view,认证通过!
5 总结
知道了基本操作后,其它操作也就容易了。更多API接口请查看官网地址:https://docs.cloudfoundry.org/api/uaa/version/74.30.0/index.html 。
代码请查看:https://github.com/LarryDpk/pkslow-samples
欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。
Spring Cloud Data Flow整合UAA使用外置数据库和API接口的更多相关文章
- Spring Cloud Data Flow整合UAA之使用LDAP进行账号管理
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 Spring Cloud Data Flow整合UAA的文章已经写了两篇,之前的方案是把用户信息保存在数据库中: ...
- Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 关于Spring Cloud Data Flow这里不多介绍,有兴趣可以看下面的文章.本文主要介绍如何整合Dat ...
- Spring Cloud Data Flow用Shell来操作,方便建立CICD
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 之前我们用两篇文章讲解了Spring Cloud Data Flow,例子都是用UI操作的,但我们在Linux系统上经常是无 ...
- Spring Cloud Data Flow 中的 ETL
Spring Cloud Data Flow 中的 ETL 影宸风洛 程序猿DD 今天 来源:SpringForAll社区 1 概述 Spring Cloud Data Flow是一个用于构建实时数据 ...
- 【SFA官方译文】:Spring Cloud Data Flow中的ETL
原创: 影宸风洛 SpringForAll社区 昨天 原文链接:https://www.baeldung.com/spring-cloud-data-flow-etl 作者:Norberto Ritz ...
- Spring Cloud Data Flow初体验,以Local模式运行
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow是什么,虽然已经出现一段时间了,但想必很多人不知道,因为在项目中很少有人用.不仅 ...
- 把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow在本地跑得好好的,为什么要部署在Kubernetes上呢?主要是因为Kubern ...
- Spring Boot + Spring Cloud 构建微服务系统(七):API服务网关(Zuul)
技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡,那我们的各种微服务又要如何提供给外部应用调用呢. 当然,因为是REST API接口,外部客户端直接调用各个微服务是没有问 ...
- Spring Cloud Alibaba Sentinel 整合 Feign 的设计实现
作者 | Spring Cloud Alibaba 高级开发工程师洛夜 来自公众号阿里巴巴中间件投稿 前段时间 Hystrix 宣布不再维护之后(Hystrix 停止开发...Spring Cloud ...
随机推荐
- c++如何理解map对象的value_type是pair类型
map 是以 pair形式插入的.map中的元素的类型value_typetypedef pair<const Key, Type> value_type;value_type 被声明为 ...
- copy函数与ostream_iterator、reverse_iterator
#include <iostream> #include <iterator> #include <vector> int main() { using names ...
- Mac OSX系统homebrew update Fetching failed问题解决方案
1. brew update error (i) 问题出现及现象描述 昨天换了台电脑,有些软件需要重新安装或更新一下,遇到了下面的问题 cv@xys-MacBook-Pro ~ % brew upda ...
- Shell 脚本重启项目
每次发打包好项目后都需要手动重启项目,写个Shell脚本一键重启项目 Shell 脚本 #!/bin/bash while getopts "n:p:" arg do case $ ...
- [DB] Hadoop免密登录原理及设置
情景: 现有两台电脑bigdata111.bigdata112,bigdata111想免密码登录bigdata112 过程: 1.bigdata111生成公钥(用于加密,给别人)和私钥(用于解密,自己 ...
- [bug] Maven项目缺少Maven Dependencies
参考 https://blog.csdn.net/whitemiao/article/details/90177135
- Select Screen 0 with xrandr Ask QuestionScreen 0" here describes your whole virtual display made of these two outputs: eDP-1-
Screen 0" here describes your whole virtual display made of these two outputs: eDP-1-1: physica ...
- Docker Swarm(一)集群部署
一.机器环境 机器规划 172.16.0.89 swarm的manager节点 manager-node 172.16.0.90 swarm的node节点 node1 机器版本(均是:CentOS L ...
- 005.Python条件if语句
一 流程控制 流程控制的定义 流程:代码执行的过程 流程控制:对代码执行过程的管控 流程控制三大结构: 顺序结构:从上到下,代码依次执行 分支结构: 一共4个 循环结构:while for 分支结构 ...
- bond0 配置ip不生效排查方法
今天巡检的时候,发现无法连接到服务器上面了,于是到机房连接到显示器查看: 1.先检查网卡,协议有没有问题. 2.远程链接的网卡名称是bond0,用ifconfig看看网卡配置,然后发现配置的 ...