为什么我在Cloud Foundry上的Spring Boot 2上的执行器/刷新端点上收到403禁止错误{使用Cloud Config Server服务}

时间:2018-09-12 15:47:35

标签: spring-boot spring-boot-actuator spring-cloud-config

在我的项目中,我有以下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中进行任何更改吗?

2 个答案:

答案 0 :(得分:7)

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

@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

答案 1 :(得分:0)

我注意到,在提交(或其他事件)之后,不需要将Spring Boot 2云配置“挂接到/ refresh端点”,因为新版本始终会请求远程git Server并比较最后的commitId和是否为不同的commitId开始获取更改。

如果调试并查看日志跟踪,请在请求http://host:8888/ {service} / {profile} / {label_branch}之后始终询问github,您会注意到,如果存在更改,则会启动“获取过程已启动”,像github谈判这样的痕迹:

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

如果您查找跟踪但不存在更改(最后的commitId相同,则不会显示协商和下载跟踪)。

我认为这不是一个好的性能行为,因此将存在一个禁用它的属性,因此需要“强制刷新挂钩行为”,但是我在Spring boot 2上找不到它。 另一方面,我喜欢它,因为您不需要启用对您的配置服务器的HTTP访问就可以得到通知,因此安全配置不会受到损害。

我尝试过Greenwich.RELEASE

希望这有助于并阐明这种行为。