【问题标题】:How to disable authorization for /restart endpoint?如何禁用 /restart 端点的授权?
【发布时间】:2018-05-17 18:44:06
【问题描述】:

我尝试在我的网络应用程序中实现重启功能。

我添加了以下依赖项:

compile("org.springframework.boot:spring-boot-starter-actuator")
compile("org.springframework.cloud:spring-cloud-starter:1.2.4.RELEASE")

在启动日志中我发现 post /restart 已注册。

我决定请求这个网址:

但结果是失败。我知道这个 url 应该受到保护,但我有自定义授权/身份验证机制,我无权更改它。

有没有办法禁用对该网址的保护?一种更好的方法 - 拥有可以在我的控制器中注入并调用的服务。弹簧里面有什么东西可以解决我的问题吗?

【问题讨论】:

  • @Herr Derb,实际上我在类路径中没有 spring 安全性
  • 那么安全性从何而来???
  • org.springframework.boot.actuate.endpoint.mvc.MvcEndpointSecurityInterceptor#isUserAllowedAccess
  • @Herr Derb,我使用 cuetom 安全机制。此机制与spring无关

标签: java spring-boot spring-security spring-cloud application-restart


【解决方案1】:

原因是spring cloud默认开启了endpoints的安全性。你需要关闭管理的security(因为/restart endpoint是一个额外的endpoint进行管理),在properties中:

management.security.enabled=false

要将端点从 ../restart 重新映射到 /foo/restart,您需要添加其他属性:

management.context-path=/foo

要实现您的自定义端点,您只需实现接口 Endpoint 并覆盖其方法。

禁用默认重启端点:

endpoints.restart.enabled=false

【讨论】:

  • 我想为这个 url 注册我自己的控制器。有可能吗?
  • 在这种情况下,我看到 spring url 具有更高的优先级
  • 首先你需要禁用默认的/restart端点endpoints.restart.enabled=false,然后自己实现这个/restart端点。或者您可以添加自定义端点,为此,您只需实现接口 Endpoint 并覆盖其方法。
  • 如果我使用 endpoints.restart.enabled=false 然后在控制器中我执行 restartMvcEndpoint.invoke - 它会响应“此端点被禁用”
  • 我尝试自动装配 import org.springframework.cloud.context.restart.RestartEndpoint 但在这种情况下,我看到该应用程序仅关闭而不是启动
【解决方案2】:

试试这个:

endpoints.restart.enabled = true
management.security.enabled=false

【讨论】:

  • 也许您知道如何重新映射网址?我只需要在控制器中做一些与我的自定义身份验证相关的额外检查
  • 用正确的答案更新你的答案endpoints.restart.enabled = true@AndriyBr。
猜你喜欢
  • 2021-10-09
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多