当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Admin使用HTTP而不是HTTPS执行器endpoint

宿楚青
2023-03-14

在Spring Boot Admin(SBA)Server上注册后,客户端的一些执行器使用http://springapplication.com/actuator而不是https://springapplication.com/actuator。为什么它将endpoint更改为HTTP,而不留在HTTPS?它是可定制的吗?

这里有一些日志和Java /YML-Files.

日志:

2018-07-02 06:13:27.683  INFO 3194 --- [-client-epoll-7] d.c.b.a.server.services.StatusUpdater    : Couldn't retrieve status for Instance(id=0d47f12b0a94, version=57, registration=Registration(name=springbootapplication-Name, managementUrl=https://springbootapplication.com/actuator, healthUrl=https://springbootapplication.com/actuator/health, serviceUrl=https://springbootapplication.com, source=http-api), registered=true, statusInfo=StatusInfo(status=UP, details={}), statusTimestamp=2018-07-02T05:06:08.423Z, info=Info(values={}), endpoints=Endpoints(endpoints={httptrace=Endpoint(id=httptrace, url=http://springbootapplication.com/actuator/httptrace), flyway=Endpoint(id=flyway, url=http://springbootapplication.com/actuator/flyway), loggers=Endpoint(id=loggers, url=http://springbootapplication.com/actuator/loggers), health=Endpoint(id=health, url=https://springbootapplication.com/actuator/health), env=Endpoint(id=env, url=http://springbootapplication.com/actuator/env), heapdump=Endpoint(id=heapdump, url=http://springbootapplication.com/actuator/heapdump), scheduledtasks=Endpoint(id=scheduledtasks, url=http://springbootapplication.com/actuator/scheduledtasks), mappings=Endpoint(id=mappings, url=http://springbootapplication.com/actuator/mappings), beans=Endpoint(id=beans, url=http://springbootapplication.com/actuator/beans), configprops=Endpoint(id=configprops, url=http://springbootapplication.com/actuator/configprops), threaddump=Endpoint(id=threaddump, url=http://springbootapplication.com/actuator/threaddump), metrics=Endpoint(id=metrics, url=http://springbootapplication.com/actuator/metrics), conditions=Endpoint(id=conditions, url=http://springbootapplication.com/actuator/conditions), auditevents=Endpoint(id=auditevents, url=http://springbootapplication.com/actuator/auditevents), info=Endpoint(id=info, url=http://springbootapplication.com/actuator/info), jolokia=Endpoint(id=jolokia, url=http://springbootapplication.com/actuator/jolokia)}), buildVersion=null)

应用yml(服务器):

server:
  port: 5100
spring: 
  security:
    user:
      name: admin
      password: password

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;

import de.codecentric.boot.admin.server.config.AdminServerProperties;

@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
    private final String adminContextPath;

    public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");

        http.authorizeRequests().antMatchers(adminContextPath + "/assets/**").permitAll()
                .antMatchers(adminContextPath + "/login").permitAll().anyRequest().authenticated().and().formLogin()
                .loginPage(adminContextPath + "/login").successHandler(successHandler).and().logout()
                .logoutUrl(adminContextPath + "/logout").and().httpBasic().and().csrf().disable();
    }
}

SpringBootAdmin应用程序。java(服务器):

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

import de.codecentric.boot.admin.server.config.EnableAdminServer;

@EnableAutoConfiguration
@EnableWebSecurity
@EnableAdminServer
@SpringBootApplication(scanBasePackages = "administration")
@PropertySource(value = "META-INF/build-info.properties", ignoreResourceNotFound = true)
public class SpringBootAdminApplication {

    private static final Logger log = LoggerFactory.getLogger(SpringBootAdminApplication.class);

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

应用yml(客户):

spring:
  application:
    name: springapplication
  boot:
    admin:
      client:
        username: ${application.security.usernameAdmin}
        password: ${application.security.passwordAdmin}
        url: "https://springBootAdminServerURL.com"
        instance:
          service-base-url: https://http://springapplication.com/
          metadata:
            user.name: ${application.security.usernameAdmin}
            user.password: ${application.security.passwordAdmin}                 
management:
  endpoints:
    web:
      exposure:
        include: "*"
application:
  security:
    usernameAdmin: admin
    passwordAdmin: password

共有3个答案

江嘉悦
2023-03-14

根据我的经验,这通常是由于两个问题。

  1. 端口配置不正确
  2. 不受信任的SSL证书

要解决第一个问题,您需要确保客户端应用程序正确通知Eureka使用安全端口:

eureka:
  instance:
    nonSecurePortEnable: false
    securePortEnabled: true

要解决第二个问题,需要确保运行Spring Boot Admin的JVM信任SSL证书。只需使用keytool将您的证书安装到JRE的cacert文件中。我建议在尝试让它工作时启用SSL调试日志记录。

-Djavax.net.debug=SSL

这两个步骤为我解决了这个问题。

西门良才
2023-03-14

需要在配置文件中更正以下表示为

用于计算要注册的服务url的基本url。路径在运行时被推断,并附加到基本url。

spring.boot.admin.client.instance.service-base-url


instance:
          service-base-url: https://springapplication.com/
万德海
2023-03-14

我也有同样的问题。查看您的应用程序/exactorendpoint。它是否将URL报告为http?对我来说确实如此,即使卫生部使用https。为我解决这个问题的是添加服务器。使用forward headers=true添加所有X-Forwarded-*,包括标识scheme(http/https)的X-Forwared-Proto

location / {
  proxy_set_header   X-Forwarded-Proto $scheme;
  ...
}
 类似资料:
  • 我有一个Spring启动 2.0.2 应用程序。当我浏览到以下 URL 时:https://my-domain-name/my-application-name/actuator,我得到以下输出: 如您所见,内容正常,但所有链接都以“http”开头,而不是https。然而,我使用HTTPS访问URL。 我尝试访问的域名是 AWS Route 53 记录,其中包含 AWS ELB 的别名。此 ELB

  • 我的eclipse安装始终使用https协议下载存储库结构。问题是我的合作代理不允许我在这个url上使用https。如何强制m2e使用http? 我尝试了m2e的不同外部maven安装,但没有成功。只有在使用CLI中的外部maven(使用http)时,它才起作用。

  • 我正在尝试构建react原生android应用程序,作为一种依赖,我看到我有gradle,但它无法在构建时加载。错误消息: 问题很明显,我坐在公司代理后面,阻止任何像这样的错误HTTPS连接。所以我的问题是:如何强制gradle使用HTTP加载这些文件?这些属性应该放在哪里(哪一个gradle文件,即gradle.properties)? P. S.我已经在gradle属性文件中设置了这些: 任何

  • 我试图在两个docker容器之间建立连接。一个是nginx服务器Symfony应用程序,另一个是Mercure。 我的应用程序工作正常,docker-comment构建也没有任何问题。问题是,当我试图测试它,并试图从Symfony应用程序发布一些东西到Mercure时,我得到了500个内部服务器错误,其中包含“未能发送更新”消息。 在堆栈跟踪中,我可以看到TransportException错误,

  • 问题内容: 用户注销后,我用于生成重定向URL: 但是,当我将页面更改为https连接时,仍然给我http。 我想明确地要求在网址开头添加https。 你能指出我该如何更改吗?我看了看Flask文档,没有运气。 问题答案: 使用Flask 0.10,将提供比包装更好的解决方案url_for。如果你查看https://github.com/mitsuhiko/flask/commit/b5069d0

  • 我有一个Maven Enterprise应用程序项目,我在业余时间都在这个项目上工作。目前,我想切换到HTTPS,但我得到的只是头痛。 编辑:这似乎是一个GlassFish 4.1.1问题(在Windows 7 x64和Netbeans 8.0.2和GF 4.1上进行了快速测试;也在Netbeans 8.1和GF 4.1上进行了测试)。HTTPS-listeners似乎无法及时启动(标记为!!!)