为什么我在 Spring Boot 2 on Cloud Foundry{using Cloud Config Server service} 上收到 403 Forbidden error for actuator /refresh endpoint

WhyI am Getting 403 Forbidden error for actuator /refresh endpoint on Spring Boot 2 on Cloud Foundry{using Cloud Config Server service}

在我的项目中,我有以下 bootstrap.properties 文件:

spring.application.name=vault-demo
management.endpoints.web.exposure.include=*

除此之外,我定义了以下依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-actuator</artifactId>
</dependency>

配置服务器能够访问 属性,但是当我将 GitHub 和 POST 中的 属性 更新为 /refresh 时,我得到一个 403: Forbidden。我是否需要对我的申请或 bootstrap.properties 进行任何更改?

我得到了解决方案,我需要添加一个安全配置,例如:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
    }
}

此外,我必须添加以下依赖项:

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-rsa</artifactId> 
    <version>1.0.5.RELEASE</version> 
</dependency>

我在以下 GitHub 问题中找到了这个解决方案: https://github.com/spring-cloud/spring-cloud-config/issues/950

我注意到 Spring Boot 2 云配置在提交(或其他事件)后不需要 "hooked to /refresh endpoint",因为新版本总是请求远程 git 服务器并进行比较最后一个 commitId 和如果不同的 commitId 开始获取更改。

如果调试并查看日志跟踪,在请求 http://host:8888/{service}/{profile}/{label_branch} 之后总是询问 github,您会注意到如果exist 更改 "fetch proccess is started " ,查看类似 github negotiation:

的痕迹

o.e.jgit.transport.PacketLineOut - git> 想要 4a766a1677.... o.e.jgit.transport.PacketLineOut - git> 93cd4a98b5b3bb7d895... 最后 o.e.jgit.transport.PacketLineOut - git> 完成

然后,下载: o.e.jgit.transport.PacketLineIn - git< ACK 0f8d2413183d5.... 常见 等等。

如果你看痕迹不存在变化(最后的commitId相同,不显示协商和下载痕迹)。

我认为这不是一个好的性能行为,所以会存在一个禁用它的 属性,因此需要一个 "forced refresh hook behaviour",但我在 Spring 上找不到它引导 2。 另一方面,我喜欢它是因为您不需要启用对您的配置服务器的 HTTP 访问来获得通知,因此安全配置不会受到损害。

我试过 Greenwich.RELEASE

希望这有助于澄清这种行为。