标签: microservices

使用Zuul作为身份验证网关

背景

我想实现本文中介绍的设计.

它可以通过下图总结: 安全架构

  1. 客户端首先使用IDP进行身份验证(OpenID Connect/OAuth2)
  2. IDP返回访问令牌(不带用户信息的不透明令牌)
  3. 客户端通过API网关进行调用,使用Authorization标头中的访问令牌
  4. API网关使用访问令牌向IDP发出请求
  5. IDP验证访问令牌是否有效并以JSON格式返回用户信息
  6. API网关将用户信息存储在JWT中,并使用私钥对其进行签名.然后将JWT传递给下游服务,该服务使用公钥验证JWT
  7. 如果服务必须调用另一个服务来完成请求,它将通过JWT,该JWT用作请求的身份验证和授权

到目前为止我有什么

我完成了大部分工作:

  • Spring云作为全球框架
  • Spring启动以启动个人服务
  • Netflix Zuul作为API网关

我还编写了一个Zuul PRE过滤器,用于检查访问令牌,联系IDP并创建JWT.然后将JWT添加到转发到下游服务的请求的标头中.

问题

现在我的问题非常具体针对Zuul及其过滤器.如果由于任何原因在API网关中验证失败,我怎样才能停止路由并直接用401响应而不继续过滤链并转发呼叫?

如果验证失败,过滤器将不会将JWT添加到标头,401将来自下游服务.我希望我的网关可以阻止这种不必要的通话.

我试着看看我怎么com.netflix.zuul.context.RequestContext用来做这个,但文档很差,我找不到办法.

gateway spring-boot microservices spring-cloud netflix-zuul

25
推荐指数
2
解决办法
2万
查看次数

Spring Boot for Java Web应用程序有哪些缺点?

[这需要投票重新开始回答.]

在创建一个新的spring应用程序时,Spring引导被认为是默认设置,因为它使设置更容易,并自动连接常见的依赖项.

我还在工业界看到以广告方式使用的弹簧靴.

事实上,简明扼要地说,开发人员采用Spring启动时所面临的缺点是什么?

Spring Boot 问题的优点显示了我同意的优点,但我认为应该有更圆润的观点.

基于非意见的观点的一个例子是:

  • Spring引导可能会不必要地增加部署二进制文件大小与未使用的依赖项.

  • 不能够如图轻松定制的日志记录在此.

java spring spring-boot microservices

24
推荐指数
1
解决办法
1万
查看次数

Zookeeper vs Eureka对微服务的作用是什么?

我将在我的应用程序中实现一组微服务的编排.两个广泛使用的工具我发现与Apache Zookeeper和Netflix Eureka相比.

任何人都可以根据基本差异给我一个比较,这两项服务有哪些?

还有其他强大的工具吗?

architecture orchestration microservices netflix-eureka apache-zookeeper

23
推荐指数
2
解决办法
2万
查看次数

术语:跟踪 ID 与相关 ID

我试图理解以下术语之间的区别:

  • 迹线ID
  • 相关ID

这两个术语似乎都用作搜索多个服务产生的相关日志的标识符,尤其是在面向微服务的架构中。

这两者之间有细微的差别吗?

我们应该在我们的软件中使用这些术语中的哪一个?我们如何决定?

logging terminology distributed-system microservices

23
推荐指数
2
解决办法
1万
查看次数

找不到模块“react-dom/client”的声明文件

使用react-dom/client时出现以下错误

Compiled with problems:X

ERROR in src/index.tsx:2:28

TS7016: Could not find a declaration file for module 'react-dom/client'. 'C:/Users/Mohamad/Desktop/HIS/Administration/Administration/Administration/Administration.Endpoints.WebUI/ClientApp/node_modules/react-dom/client.js' implicitly has an 'any' type.
  Try `npm install @types/react-dom` if it exists or add a new declaration (.d.ts) file containing `declare module 'react-dom/client';`
    1 | import * as React from 'react';
  > 2 | import { createRoot } from 'react-dom/client';
      |                            ^^^^^^^^^^^^^^^^^^
    3 | import App from './App';
    4 |
    5 |
Run Code Online (Sandbox Code Playgroud)

javascript reactjs microservices asp.net-core react-redux

23
推荐指数
2
解决办法
1万
查看次数

使用docker-compose和多个存储库

我目前正在努力部署我的服务,我想问一下,当你必须处理多个存储库时,正确的方法是什么.存储库是独立的,但要在生产中运行,一切都需要启动.

我的设置:

  • Git存储库后端:
    • 后端项目导轨
    • docker-compose:backend(公开3000),db和redis
  • Git Repository Frontend
    • Express.js服务器
    • docker-compose :(暴露4200)

两者都可以独立运行,测试可以由CI执行

  • 用于生产的Git Repository Nginx
    • 需要连接到其他两个服务(相同的docker网络)
    • 将请求转发给正确的服务

我已经尝试将这两个服务作为子模块包含到Nginx存储库中并使用nginx repo的docker-compose,但我对此并不满意.

docker microservices docker-compose

22
推荐指数
1
解决办法
7216
查看次数

微服务架构中的Websockets

假设我们有一个通知服务,它从消息队列中读取事件并实时通知所有Web客户端.我知道Web套接字是如何工作的,但是当我们之间有一个API网关然后如何在客户端,API网关和通知服务之间维护Web套接字连接时我很困惑.

请帮忙!谢谢

编辑: 架构: 在此输入图像描述

web-applications websocket microservices api-gateway

22
推荐指数
3
解决办法
6916
查看次数

父pom和微服务

  • 我们有几个微服务项目,每个项目都是独立的(在单独的Spring引导服务器上运行,公开其他服务,使用单独的DB模式...)
  • 我们使用maven来管理依赖项.

让父pom将每个微服务声明为模块是一个好主意吗?所以有助于管理公共依赖项(比如在每个项目中使用lib servlet-api,删除所有项目并仅在父pom中声明它)

java maven microservices

21
推荐指数
3
解决办法
8236
查看次数

产品版本微服务

我进入基于docker的微服务架构,我有3个微服务,它们共同创建了一个产品,例如"CRM系统".

现在我希望我的客户能够随时升级他的产品.我有3个不同版本的微服务,客户应该看到哪一个?我想产品版本应该独立于微服务,因为复制一个微服务版本会让我比没有版本更麻烦.

那么有什么模式,想法来处理这种情况吗?

我唯一想到的是拥有另一个存储库,只要其中一个微服务生成生产就绪包,就会对其进行版本控制.但是,我现在有一个版本,我的产品所有者(PO)都不知道.

architecture soa domain-driven-design docker microservices

21
推荐指数
2
解决办法
8262
查看次数

反应式编程优点/缺点

我一直在研究并尝试使用Reactor和RxJava进行编码的Reactive Style.我确实理解,与单线程执行相比,反应式编码可以更好地利用CPU.

在基于Web的应用程序中,反应式编程与命令式编程之间是否有任何具体比较?

通过对非反应式编程使用反应式编程,我实现了多少性能提升和吞吐量?

还原反应编程有哪些优缺点?

有没有统计基准?

java reactive-programming project-reactor microservices rx-java2

21
推荐指数
3
解决办法
1万
查看次数