当前位置: 首页 > 知识库问答 >
问题:

Spring Boot致动器endpoint配置似乎不像预期的那样工作

景胜涝
2023-03-14

我有一个非常简单的Spring Boot应用程序。它只是一个zuul反向代理。除了基本设置之外,没有任何安全或其他东西可以通过eureka和路径映射发现我们的服务。我试图防止我们的执行器endpoint公开暴露,但仍然希望健康检查endpoint用于我们的ELB,但不希望它报告它所知道的所有服务的健康(我希望它是敏感的)。在试图弄清楚我需要设置什么属性来获得预期的行为时,我正在经历非常意外的行为。

例如,当我设置属性endpoints.sensitive=true时,这不会将健康检查终结点的默认值更改为敏感。这似乎与文件上说的相反。

http://docs.spring.io/spring-boot/docs/1.4.2.release/reference/htmlsingle/#production-ready-customizing-endpoints

同样,您也可以选择全局设置所有endpoint的“敏感”标志。默认情况下,敏感标志取决于endpoint的类型(参见上表)。例如,要将所有endpoint标记为敏感endpoint,信息除外:

Endpoints.Sensitive=true

所以这是很好的,我的健康检查endpoint现在只报告向上或向下,没有其他。但现在我希望健康检查endpoint是唯一启用的endpoint。因此,我设置了endpoints.enabled=falseendpoints.health.enabled=true,这将禁用除health以外的所有endpoint。然而,事实似乎并非如此。在我的实例中,我可以点击/routes/resume/pause/hystrix.stream等。只有在使用endpoint.enabled=false禁用所有endpoint,然后使用endpoint.actuator.enabled=true启用执行器endpoint时,我才能确定这一点,这允许我命中执行器endpoint,执行器endpoint随后报告这些endpoint已启用。

{
  "links": [
    {
      "rel": "self",
      "href": "http://localhost:9200/actuator"
    },
    {
      "rel": "resume",
      "href": "http://localhost:9200/resume"
    },
    {
      "rel": "pause",
      "href": "http://localhost:9200/pause"
    },
    {
      "rel": "hystrix.stream",
      "href": "http://localhost:9200/hystrix.stream"
    },
    {
      "rel": "env",
      "href": "http://localhost:9200/env"
    },
    {
      "rel": "routes",
      "href": "http://localhost:9200/routes"
    },
    {
      "rel": "health",
      "href": "http://localhost:9200/health"
    },
    {
      "rel": "refresh",
      "href": "http://localhost:9200/refresh"
    },
    {
      "rel": "restart",
      "href": "http://localhost:9200/restart"
    }
  ]
}

我希望只看到我显式启用的两个endpoint。

{
  "links": [
    {
      "rel": "self",
      "href": "http://localhost:9200/actuator"
    },
    {
      "rel": "health",
      "href": "http://localhost:9200/health"
    }
  ]
}

单独禁用每个endpoint似乎不会将它们从执行器endpoint中删除,但现在当尝试访问时,我会得到一个“此endpoint已禁用”消息,这是一个改进。但是,我似乎无法禁用routes或`hystrix.stream*endpoint,因为似乎没有公开此功能的配置

所有这些都说了,我在想这是预期的行为还是这是一个bug?

共有1个答案

唐裕
2023-03-14

我遇到了和你在这里描述的一样的问题。请先检查您的Spring启动版本!全局“Endpoints.Sensitive”设置在某些指定的spring启动版本上未生效。(不确定版本号的确切位置。这似乎是spring Boot中的一个重构回归。)

这里有一些参考资料。

  • 允许全局敏感覆盖#4419
  • Spring引导执行器:将所有endpoint设置为“敏感”使所有endpoint都可访问#4368

在我将Spring Boot更新到1.3.0版本之后,设置“endpoints.sensitive=true”对我来说是正确的。希望这对你也有用。祝你好运,伙计。

 类似资料:
  • 最后是持久性上下文配置: 我很感谢你的帮助。

  • 我想使用查找从一个集合中获取一些数据并将其放入另一个集合中。 在localfield或foreignfield中写什么都不重要,因为它从player_game_stats中获取所有数据并将其插入player集合中的每个文档中。我想检查localfield和foreignField是否相等,但lookup不检查这一点。我对mongodb使用NoSqlBooster

  • 我有两个Avro模式V1和V2,在spark中读取如下: V1有两个字段“一”和“二” V2 与新字段:“三” 场景:编写器使用 V1 进行写入,读取器使用 V2 对 avro 记录进行解码。我的期望是看到字段3填充了默认值,即null。但是我在spark工作中遇到了以下异常。 我是不是错过了什么?我的理解是avro支持向后兼容。

  • 我正在使用wedriveri o 4.5: 我需要等到某个元素存在,如果它不存在,处理这种情况。 例如: 但如果页面上不存在元素,webdriver会将我的测试标记为失败,并显示消息:“超时10000毫秒。”。尝试减少运行时间或增加测试规格的超时时间(http://webdriver.io/guide/testrunner/timeouts.html); 如果回复promise,确保其得到解决 >

  • 你好,亲爱的StackOverflow社区,我最近遇到了一个问题,我不能把一个已经保存的对象的引用放进去。我不想保存或更新对象,因为这些对象是预先插入到我们的数据库中的。 所以基本上我的情况是这样的:我有一个父,在本例中它是一个摄取,对象有一个IntakeTimes列表,它们被声明为remainingdoses。有道理,嗯。 我的模型看起来如下: 我期待着任何帮助或提示,谢谢社区。