我正在尝试使用转发调用的 zuul 配置 API 调用路由器。有两种服务:users 服务使用路径版本控制,即/v1/users, /v2/users,...accounts 服务不使用路径版本控制,因此所有路由都省略前缀v*( /accounts)。
为了提供一个通用接口,我想接受对/v*/accounts我的 api 路由器的调用并将它们转发到/accounts我的帐户服务。呼叫应按/v*/user/原样转发至用户服务。
我的 application.yml 看起来像这样
zuul:
routes:
users:
path: /v*/users/**
url: ${microservices.usersServiceUrl}
stripPrefix: false
accounts:
path: /v*/accounts/**
url: ${microservices.accountsServiceUrl}
stripPrefix: true
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并没有达到预期的效果。帐户路径中的任何内容都不会被删除,并且会按原样转发。
如果我删除正则表达式 ( v*) 并放入path: /v1/accounts/**,则整个前缀/v1/accounts将被删除。显然,正则表达式可以防止前缀被剥离,从而发挥path: /v1/**/accounts/**作用。然而,我想避免明确命名所有版本,因为我们的 API 目前正在快速发展。
使用全局zuul.prefix也没有帮助,因为你只能全局决定将其剥离或保持完整。
我主要依赖这个文档。
有没有更好的方法来指定转发的 URL 的格式?
我有一个反应式管道来处理传入的请求。对于每个请求,我需要调用一个与业务相关的函数 ( doSomeRelevantProcessing)。
完成后,我需要通知一些外部服务发生了什么。管道的那部分不应增加总体响应时间。此外,通知此外部系统并不是业务关键:在管道的主要部分完成后给出快速响应比确保通知成功更重要。
据我所知,在后台运行某些内容而不减慢整个过程的唯一方法是直接在管道中订阅,从而实现“一劳永逸”的心态。
除了在 内订阅之外,还有其他好的选择吗flatmap?我有点担心如果通知外部服务花费的时间比原始处理时间长并且同时收到大量请求会发生什么情况。这是否会导致内存耗尽或整个进程阻塞?
fun runPipeline(incoming: Mono<Request>) = incoming
.flatMap { doSomeRelevantProcessing(it) } // this should not be delayed
.flatMap { doBackgroundJob(it) } // this can take a moment, but is not super critical
fun doSomeRelevantProcessing(request: Request) = Mono.just(request) // do some processing
fun doBackgroundJob(request: Request) = Mono.deferContextual { ctx: ContextView ->
val notification = "notification" // build an object from context
// this uses non-blocking HTTP (i.e. webclient), so it can …Run Code Online (Sandbox Code Playgroud) 我想弄清楚什么state和nonceOpenID Connect 代码流中的哪些内容有好处。
从我目前所读到的内容来看,主要攻击似乎是攻击者可以拦截身份验证响应,包括授权代码。但是,如果攻击者重放身份验证响应,则身份验证代码将已被使用,OP 将拒绝令牌请求。我看到,规范不需要验证码是一次性密码,在这种情况下,我看到了重播是如何可能的。但是,我们会在使用后使验证码无效。
我也知道,使用 CSRF,攻击者可以使用不同的身份验证代码调用我的客户端重定向 uri。我还没有看到该代码在 OP 中如何有效。攻击者可以猜测有效的身份验证代码的想法是什么?
任何人都可以向我展示一个用状态和/或随机数解决的攻击向量吗?