通过Spring-Boot-Admin和Eureka发现进行身份验证

时间:2018-06-25 20:05:29

标签: spring-boot spring-boot-actuator spring-boot-admin

SBA版本2.0.1

Spring-Cloud Finchley。发布

我在尤里卡(Eureka)注册了一些服务。这些服务是Spring-Boot应用程序,其执行器由HTTP基本身份验证保护。维修执行器位于/ actuator。服务正在运行,我可以通过Postman和curl与他们的执行器进行交互。 SBA连接到Eureka并发现服务,但是它们始终处于关闭(红色)状态,但SBA应用程序本身除外,该应用程序在SBA控制台中显示为绿色,因此我可以单击它并查看这是属性。

当我单击其中一个服务实例时,系统会提示我输入凭据。我不确定要使用什么凭证,因此我将凭证用于服务执行器。我已经在docs中显示了元数据映射中的这些凭证,但是无论如何我仍然会被提示输入凭证。这总是导致显示Whitelabel错误页面,并显示如下错误消息:

  

CDT 2018年6月25日星期一12:40:57发生意外错误   (类型=不允许使用方法,状态= 405)。请求方法“ POST”不正确   支持

尽管我注意到该错误的网址显然在SBA实例本身上,而不是在远程服务上。网址解码为:http://localhost:8080/#/instances/9207aa5fc06b/

但是我在服务的日志中看到了这一点,因此显然有未经身份验证的请求正在将其发送到删除服务:

  

[2018-06-25 12:16:54.242]-调试-[http-nio-8380-exec-7]   [AUTHENTICATION_SERVICE_DEV,8dc8165d4f77be7c,8dc8165d4f77be7c,否]   --- [nio-8380-exec-7] o.s.w.s.m.m.a.HttpEntityMethodProcessor:书面[{timestamp = Mon Jun 25 12:16:54 CDT 2018,status = 401,   错误=未经授权,消息=未经授权,路径= /执行器/运行状况}]为   使用“ application / vnd.spring-boot.actuator.v2 + json”   [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@30c8681]

这在SBA日志中:

  

2018-06-25 12:39:40.884错误[SERVICES_ADMIN_CONSOLE_LOCAL ,,] 20728   --- [nio-8080-exec-8] o.a.c.c.C。[。[。[/]。[dispatcherServlet]:在具有路径的上下文中,用于Servlet [dispatcherServlet]的Servlet.service()   []抛出异常

     

java.io.IOException:已建立的连接已被中止   主机中的软件

这是我困惑的根源,我不确定我需要什么凭证,甚至无法验证我的身份。我已经在属性和登录表单中为远程服务提供了凭据,但是它不起作用。

当我在SBA控制台中单击SBA应用程序时,它会按预期工作。因此,这似乎与对远程执行器进行身份验证有关,但我不知道问题出在哪里。

服务器:

@Configuration
@EnableAutoConfiguration
@EnableEurekaClient
@EnableAdminServer
public class ServiceAdmin {

    public static void main(String[] args) {
        SpringApplication.run(ServiceAdmin.class, args);
    }

    @Configuration
    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().permitAll()
                    .and().csrf().disable();
        }
    }
    }

SBA配置:

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
management.info.git.mode=full
management.endpoint.shutdown.enabled=true
spring.security.user.name=actuator
spring.security.user.password=password
spring.security.user.roles=ACTUATOR

eureka.instance.leaseRenewalIntervalInSeconds=10
eureka.instance.health-check-url-path=/actuator/health
eureka.instance.metadata-map.user.name=actuator
eureka.instance.metadata-map.user.password=password
eureka.client.registryFetchIntervalSeconds=5
eureka.client.serviceUrl.defaultZone=http://svcregistry1.mycompany.com/eureka/,http://svcregistry2.mycompany.com

2 个答案:

答案 0 :(得分:1)

对于任何一个像我一样困惑的人,想弄清楚这个答案。

我在同一应用程序中有Eureka和Springboot管理服务器/ ui

所有将要注册到eureka和springboot admin的服务都将需要它们自己的/ actuator凭据作为元数据显示:

eureka.instance.metadata-map.user.name = ${endpoints.user.name} 
eureka.instance.metadata-map.user.password = ${endpoints.user.password}

此帖子清除了一些内容。 https://zoltanaltfatter.com/2018/05/15/spring-cloud-discovery-with-spring-boot-admin/

答案 1 :(得分:0)

这里的问题是我无法理解文档。元数据映射中的eureka凭证必须在注册时由受监视的应用程序提供。 SBA配置中未提供。