总线刷新端点在春季云 Finchley.M8 中不起作用

Posted

技术标签:

【中文标题】总线刷新端点在春季云 Finchley.M8 中不起作用【英文标题】:Bus Refresh Endpoint not working in spring cloud Finchley.M8 【发布时间】:2018-08-26 23:19:56 【问题描述】:

我正在使用带有 Spring boot 2.0.0.RELEASE 的 Spring cloud config Finchley.M8 版本。 我注意到 /bus/refresh 已更改为 /bus-refresh。 但是,每当我使用 post http 请求点击 url 时,它就无法正常工作。 这是application.properties的sn-p:

spring.cloud.bus.enabled=true
management.endpoints.web.exposure.include=bus-refresh,refresh
management.endpoints.web.base-path=/

另外,我扩展了 WebSecurityConfigurerAdapter 以添加以下代码 sn-p:

@Override
protected void configure(HttpSecurity http) throws Exception 
    http.authorizeRequests().requestMatchers(EndpointRequest.toAnyEndpoint()).permitAll();

这是我要测试的网址:

post http://localhost:8000/bus-refresh?destination=**:dev

然后我收到以下错误消息


"timestamp": "2018-03-18T07:03:54.135+0000",
"status": 403,
"error": "Forbidden",
"message": "Forbidden",
"path": "/bus-refresh"

另外,这里是 pom.xml 中依赖项的 sn-p:

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.M8</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-monitor</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security.oauth.boot</groupId>
        <artifactId>spring-security-oauth2-autoconfigure</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.retry</groupId>
        <artifactId>spring-retry</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-properties-migrator</artifactId>
    </dependency>
</dependencies>

有什么帮助吗?

注意:我使用的是带有 spring 1.5.6 的旧版本的 spring cloud,它工作正常,当我使用最新的 spring cloud 版本迁移到 Spring boot 2 时遇到了这个问题。

【问题讨论】:

【参考方案1】:

我找到了解决问题的方法,它是关于安全性的。 我只是在我的 WebSecurityConfigurerAdapter 中修改了 configure 方法,增加了两行。就像下面的sn-p:

@Override
protected void configure(HttpSecurity http) throws Exception 
    http.authorizeRequests().requestMatchers(EndpointRequest.toAnyEndpoint()).permitAll();
    http.csrf().disable();
    http.httpBasic().disable();

【讨论】:

【参考方案2】:

试试这个来解决你的问题:

spring-boot 2.0.1.RELEASE
spring-cloud-bus 2.0.0.RC1

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh,refresh

      base-path: /

【讨论】:

以上是关于总线刷新端点在春季云 Finchley.M8 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在春季授权服务器中允许端点?

Firebase 云功能:带有 CORS 阻止的总线男孩的 POST 方法

如何在春季安全中IP白名单/oauth/check_token端点

Spring Cloud Azure 参考文档

春季数据休息

春季安全过滤器问题