0

我正在使用Spring-Boot-Admin来监控 SpringBoot 应用程序,其执行器端点使用基本身份验证进行保护。如文档中所述,所需的凭据将传输到 Spring-Boot-Admin (SBA) 。SBA 本身也使用spring-boot-admin-server-ui-login提供的 SecurityConfiguration 进行保护(基于文档和示例应用程序,请参阅Github Repo获取代码)。要监控的应用程序和 SBA 都是通过 docker 部署的。

登录到 SBA 工作正常,我可以看到应用程序状态以及运行状况结果。不过,对于某些内容,我看到了一个嵌套的登录掩码。当我点击“Logging”或“JMX”时,我被重定向到登录掩码:嵌入式登录掩码

/jolokia在浏览器网络选项卡中,我可以看到端点返回了 401 。之后的所有请求似乎都被转发到登录页面。

我有以下问题:

  1. 如果对应用程序的一个请求失败,为什么我会退出?那是一个错误吗?
  2. 401的来源是什么?SBA 还是我的应用程序?我知道 SBA 代理对应用程序的请求。根据我的应用程序的访问日志,/jolokia当我登录 SBA 时没有完成任何请求。这是否意味着SBA直接返回401?它的日志虽然没有任何相关性。
  3. 直接访问/jolokia端点工作正常。当我使用 SBA 使用的相同(代理)URL(例如http://XXX:8090/api/applications/XXX/jolokia/)时,它甚至可以工作。从 SBA 内部执行时有什么不同?

我试图在 SBA 中找到更多错误详细信息,但到目前为止未能找到正确的日志记录选项。它们要么不包含任何相关信息,要么包含太多似乎不相关的信息(例如 Spring Security)。记录完整的响应可能会有所帮助......

编辑:我刚刚意识到,对/jolokia端点的请求实际上包含与对工作端点的请求(例如)不同的 cookie(Cookie:JSESSIONID=4E51B84AE15A6890500F967B23EB92AC /metrics)。这很奇怪,但可能解释了为什么/jolokia端点返回 401。现在的问题是:为什么它会发送不同的 cookie?

4

2 回答 2

0

我尝试了各种方法,但最终无法解决这个问题。

相反,我最终得到了不同的配置:端点 ( management.security.enabled=false) 根本没有安全性,而是将它们暴露在不同的端口 ( management.port=8081) 上。此管理端点被完全阻止外部访问系统。

这样,SBA 表现良好,应用程序仍然是安全的。最后,它的设置要简单得多,这也很好。

于 2017-10-21T17:26:56.493 回答
0

我有一个类似的问题。

我可以访问所有执行器端点,但 /jolokia 的所有内容都不会被授权。尽管我的安全设置与您的不同,但我认为问题是相同的。

当我深入研究这一点时,我发现 jolokia 在其自己的 servlet 中与 Spring Boot 应用程序分开运行。也许因此你有不同的会话!?

我的安全配置尝试匹配这个表达式

.mvcMatchers("/actuator/**").access("hasAnyRole('ADMIN','SBA')") ,

但 SBA 用户角色无法访问 Jolokia。它总是匹配最后一个只允许管理员的后备规则。

在我的情况下,jolokia servlet 的上下文和 servlet 路径将在尝试将其与我的安全配置匹配之前从请求路径中剥离。然后它只会将“/list”与我的 MVC 匹配器匹配,而不是“/actuator/jolokia/list”,这将不符合预期。

不幸的是,我没有解决您的问题的方法。对于我的情况,我添加了一个 requestMatchers 规则,它不那么固执己见,并且仍然匹配:

.requestMatchers(request -> request.getRequestURI().contains("/actuator/jolokia/")).access("hasAnyRole('ADMIN','SBA')")

代替

.mvcMatchers("/actuator/**").access("hasAnyRole('ADMIN','SBA')")

于 2022-03-03T15:56:19.140 回答