ABP vNext微服务架构详细教程——身份管理服务

1

框架搭建

c6c27aff2a549da4f3e5559ddd4bdefe.png

ABP vNext创建包含app和module两种模板,其中app方式所创建的模板包含用户、角色、权限管理,ABP基础配置IdentityServer的基础配置数据等功能。module模式是一个比较干净的服务,里面不包含默认业务功能。

051ba9b750c356a31e24c72f7b1b766f.gif

ABP vNext创建包含app和module两种模板,其中app方式所创建的模板包含用户、角色、权限管理,ABP基础配置IdentityServer的基础配置数据等功能。module模式是一个比较干净的服务,里面不包含默认业务功能。

637a676992f8acb09b937dd160638320.gif

这里我们构建身份管理服务,需要用到ABP vNext框架自带的用户角色管理模块,所以采用app模式构建项目源码。项目名称为Demo.IdentityManager,构建命令如下:

abp new Demo.Identity -t app --ui none --separate-identity-server -dbms MySQL

329d04f3db060db48ff071030b2b36cd.png

这里 

 -t app 表示application模式 ,

--ui none 表示不使用UI界面, 

--separate-identity-server 表示将身份认证服务IdentityServer和当前项目服务分开, 

-dbms MySQL 表示使用MySQL数据库。

8ee0f6baec67a55b277d14c945fa68e0.gif

执行命令后,执行目录中会出现aspnet-core文件夹,将该文件夹中所有内容拷贝至项目解决方案的service/identitymanager目录下,将其中的IdentityServer项目移动至identityserver文件夹下,若直接添加IdentityServer项目到解决方案会报错找不到common.props,这是因为相对路径发生变化,可将identitymanager目录下的common.props文件复制一份到总解决方案sln所在目录

6a93ba8e1cfbf4116d31243d6ce37644.gif

目录调整完成后,使用sln构建工具添加所有项目到总解决方案。添加后项目结构如下图:

04abe222172c19b4b0f12693dd7a70dd.png

ff565ca1fd72fe04ac3adee370892135.png

因为IdentityServer项目相对路径发生变化,需删除并重新添加该项目对EntityFrameworkCore项目的引用。

如果不想使用ABP自带的单元测试可以将解决方案文件夹test及其下项目删除。

2

初始化数据库

59294938b51111960dc6325b0b1b6a80.gif

在ABP vNext框架application模式代码创建的数据库中,会包含用户、角色、权限、配置等功能的表,以及IdentityServer框架各项数据库持久化数据的表。

ac6f2c732c072e644fe3883b139f979d.gif

application模式下所创建的项目中的DbMigrator项目包含创建、执行数据迁移并初始化数据的功能。

72a21ffccdd3dde5fef6a255ec5d3ece.gif

正常情况下我们修改DbMigrator项目的配置文件appsettings.json中的ConnectionStrings:Default字段改为我们所使用的数据库并执行该项目,即可创建所需要的数据库

但我当前所用版本6.0.1有一个小Bug,运行DbMigrator项目会卡在创建数据迁移这一步,需要我们修改数据库链接字符串后手动创建数据迁移并执行,使用dotnet-ef命令执行如下:

  1. 在EntityFramework项目目录下进入cmd命令行

  2. 确保dotnet-ef命令已安装并更新至最新版本,具体可参考:https://docs.microsoft.com/zh-cn/ef/core/get-started/overview/install

  3. 添加数据迁移

    dotnet-ef migrations add InitDb
  4. 执行数据迁移

    dotnet-ef database update -s ..\Demo.Identity.DbMigrator

执行完成后,数据库已创建成功,运行DbMigrator项目可完成数据初始化。

3

调整及测试

0ac7a3f08ebf81f630d372faf96bb158.gif

身份管理服务运行项目为Identity.HttpApi.Host,将此项目设置为启动项。

845654c5a8b28853bb143401cbcc7631.gif

修改Identity.HttpApi.Host项目中的配置文件appsettings.json,修改数据库链接字符串:ConnectionStrings:Default,及Redis地址Redis:Configuration,按照服务规划我们给该服务设置的规划的端口号为5000,所以在appsettings.json中添加配置项: 

"urls": "http://*:5000"

5ecc0f98fb20f185256735bbb63ac659.gif

默认情况下,ABP vNext框架自带的用户角色权限等接口需要授权用户才可以访问,依据我们之前的设计,微服务中的各项服务不需要二次权限验证,这里我们全局忽略权限验证,否则调用时会报401错误。忽略方法为在IdentityHttpApiHostModule的ConfigureServices方法中添加以下内容:

context.Services.AddAlwaysAllowAuthorization();

f53452672fc297ed9950a7e42ef43601.gif

以控制台方式启动项目Identity.HttpApi.Host项目,启动完成后通过浏览器访问http://localhost:5000/swagger/index.html,成功显示Swagger页面,测试/api/identity/users的Get方式接口,返回admin用户信息,说明服务配置成功。

b7ccb82ba90cd14d6452297844cb39e0.png

end

26a90ed6c52877e749b4e4134ed7367e.png

45e6d1c994947a3fd4535dfdfffbb18b.png

36868705cfab2f4e19bd890d2e674e67.png

更多精彩

关注我获得

c078d684200e63939ca3587b8e9a058c.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu安装时发现GPT分区表,无法安装问题

光盘安装时,先试用ubuntu,输入命令: sudo dd if/dev/zero of/dev/sda bs1 count8 seek512再用光盘引导安装即可。转载于:https://www.cnblogs.com/chengliu/p/3636343.html

双网卡上网冲突解决_【技术文章】局域网IP地址冲突罪魁祸首是什么?这几点要注意!(附高手处理方法)...

现如今,人们的生活处处离不开网络。单位办公信息化对网络的依赖则更大。为了提升安全管理和信息化水平,很多单位不仅建设了完善的办公信息系统,还部署了视频监控。但由于缺乏整体规划,或选择网络产品时考虑欠周,导致网…

异常分析

一、请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。 (1)源代码;import javax.swing.*; class AboutException { public static void main(String[] a) { int i1, j0, k; ki/j; try { k i/j…

linux c之wait和waitpid函数的用法和总结

1、wait和waitpid函数的介绍 1) wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。 2) waitpid()的作用和wait()一样,但它并不一…

微软开发者的年度回顾

2021 年 .NET 和 Microsoft 开发人员的技术都发生了什么?很难从 2021 年只选择一个主题。安静的进化?开源的争议?一个让开发人员疑惑的操作系统更新?当我回头看时, 发现一年发生了很多事情, 2021 年的发展是稳步向前的&#xff0c…

我是永远不可能出轨的,除非......

1 当爸妈学会了抠图(素材来源豆瓣,侵删)▼2 帮我带瓶我平时常喝的水(素材来源网络,侵删)▼3 我们是被资本凑在一起的联姻(素材来源网络,侵删)▼4 我是不会出轨的&…

个人控件/对象命名规范(慢慢更新)

自己收集自网络,转载本文请保留来源(否则以后我这边更新了,不写转载来源的坑爹了) 控件/对象类型前缀AppBar只有一个:appBar/多个:suffix:XXXAppBarAppBarButtonbtnBorderbrdButtonbtnCanvascnvCheckBoxchk…

页面滚动固定

实例代码: 1 $(document).scroll(function () {2 3 var $leftBox $(.lFixedBlock),4 $rightBox $(.rFixedBlock),5 leftBoxHeight $leftBox.height(),6 rightBoxHeight $rightBox.height(),7 …

python listbox排序_python – 从tkinter.Listbox中提取项目列表

我编写了以下tkinter脚本来了解如何将数据列表添加到tkinter.Listbox小部件中.我发现了两种方法.接下来,我想从tkinter.Listbox小部件中提取相同的列表.在4种不同的方法中,我只设法让第4种方法(即e4)起作用.如何使e1,e2和e3方法起作用?最终目标是获取最初提供给tkin…

学号20145209《信息安全系统设计基础》第11周学习总结

学号20145209《信息安全系统设计基础》第11周学习总结 教材学习内容总结 教材学习内容总结 第八章 异常控制流 1、从给处理器加电开始,直到断点为止,程序计数器假设一个值的序列 a0,a1,……,an-1 每个ak是某个相应的指…

别让猴子跳回背上摘抄

1. 源源不断的猴子 管理者的贡献来自于他们的判断力与影响力,而非他们个人投入的时间长短与埋头苦干的程度。 他们掌控时间的方式,和那些非管理者对于时间管理的考虑大不相同——后者的贡献主要来自于时间与努力。 对于非管理者而言,时间管…

linux之学习linux系统相关的书籍

1.《鸟哥的Linux私房菜-基础学习篇》 2.《Linux Shell 脚本攻略》 3.《Unix环境高级编程》 4.《Linux系统编程》

16岁上大学,25岁博士毕业,她还是南大医学院最年轻的博导!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自:募格学术魏嘉,16岁考上南大,25岁博士毕业,是南大医学院最年轻的博导,已在J Natl Cancer Inst等国际著名杂志上发表64篇SCI论文。在第24届“中国青年五四奖章”入围名单…

十年整理CAD精髓

为什么80%的码农都做不了架构师?>>> AUTOCAD使用心得之一 使用的三个基本方面:清晰、准确、高效 目前,公司的设计文件,特别是图纸,都是用AUTOCAD软件绘制的。但是,现在还有很多人对CAD并不是…

Oracle免客户端InstantClient安装使用

正常情况下,用PL/SQL等软件连接Oracle,需要安装Oracle客户端软件,一般安装oracle客户端差不多需要2G左右的硬盘空间,但如果我们仅仅是连接数据库进行查询和执行一些相应的语句而不进行相应开发,那么oracle客户端就显得…

使用这个库,让你的服务操作 Redis 速度飞起

点击上方蓝字关注 👆👆没领红包封面的可以在文末领取大多数人使用 Redis 作为远程缓存存储,因为它速度快。Redis6 通过消除不必要的网络往返,可以使其更快。服务器辅助的客户端缓存这个方法很简单。Redis6 会记录客户端请求的键值…

mysql bigint转string_无语了,直到今天,我才揪出MySQL磁盘消耗迅猛的“真凶”!...

作者:dbapower链接:https://blog.51cto.com/suifu/2135599背景Part1:写在最前当一张单表10亿数据量的表放在你面前,你将面临着什么?Part2:背景介绍为了提升数据库资源利用率,一个实例中,在不互相影响&#…

linux之sed命令详解

sed命令详解: sed是stream editor的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到…

mysql导入sql脚本命令

2019独角兽企业重金招聘Python工程师标准>>> 使用mysql自带的命令行工具导入sql脚本如下&#xff1a; mysql -h localhost -u root -proot -v -Ddbname < dbname.sql 转载于:https://my.oschina.net/u/2450094/blog/795488

媒体层图形技术之AssetsLibrary 学习笔记

choudang的专栏转载自 http://m.blog.csdn.net/blog/choudang/28274519 1.ALAsset ALAsset类代表相册中的每个资源文件&#xff0c;可以通过它获取资源文件的相关信息还能修改和新建资源文件 Asset Properties – valueForProperty: (1.ALAssetPropertyType 资源的类型&…