Spring 引导管理员:自定义 header 身份验证
Spring Boot Admin: custom header authentication
我的应用程序具有基于自定义 HTTP header 的自定义身份验证机制。 AFAIK,Spring Boot Admin 仅支持基本身份验证和 OAuth。但也许有一种方法可以让客户随请求一起提供一些自定义 header?
您可以通过如下方式注入 Bean,将自定义 headers 添加到现有 headers 中。
@Bean
public HttpHeadersProvider customHttpHeadersProvider() {
return instance -> {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("X-CUSTOM", "My Custom Value");
return httpHeaders;
};
}
好的,如果 SBA 服务器和 SBA 客户端都与受监控的应用程序本身一起启动,并且它具有 custom-headers 安全性,我们需要处理 3 件事:
- 正如 Nitin 提到的,需要注册
HttpHeadersProvider
bean:
@Bean
public HttpHeadersProvider customHttpHeadersProvider() {
return instance -> {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("X-CUSTOM", "My Custom Value");
return httpHeaders;
};
}
- 请注意,这些 header 不适用于对执行器端点的
OPTIONS
请求,因此需要自定义 ProbeEndpointsStrategy
或禁用 [=38=] OPTIONS
调用管理 URL 的安全性。此外,出于某种原因,我不得不禁用 /actuator/health/**
的安全性,尽管它应该可以通过提供的自定义 header 访问:
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers(HttpMethod.OPTIONS, "/actuator/**").antMatchers(HttpMethod.GET, "/actuator/health/**");
}
- 最后,需要用自定义
RestTemplate
实例化 ApplicationRegistrator
,这将是 pre-populated 和自定义 header:
@Bean
public ApplicationRegistrator registrator(ClientProperties client, ApplicationFactory applicationFactory) {
RestTemplateBuilder builder = new RestTemplateBuilder()
.setConnectTimeout(client.getConnectTimeout())
.setReadTimeout(client.getReadTimeout())
.additionalInterceptors((request, body, execution) -> {
request.getHeaders().set("X-CUSTOM", "My Custom Value");
return execution.execute(request, body);
});
if (client.getUsername() != null) {
builder = builder.basicAuthentication(client.getUsername(), client.getPassword());
}
return new ApplicationRegistrator(builder.build(), client, applicationFactory);
}
我的应用程序具有基于自定义 HTTP header 的自定义身份验证机制。 AFAIK,Spring Boot Admin 仅支持基本身份验证和 OAuth。但也许有一种方法可以让客户随请求一起提供一些自定义 header?
您可以通过如下方式注入 Bean,将自定义 headers 添加到现有 headers 中。
@Bean
public HttpHeadersProvider customHttpHeadersProvider() {
return instance -> {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("X-CUSTOM", "My Custom Value");
return httpHeaders;
};
}
好的,如果 SBA 服务器和 SBA 客户端都与受监控的应用程序本身一起启动,并且它具有 custom-headers 安全性,我们需要处理 3 件事:
- 正如 Nitin 提到的,需要注册
HttpHeadersProvider
bean:
@Bean
public HttpHeadersProvider customHttpHeadersProvider() {
return instance -> {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("X-CUSTOM", "My Custom Value");
return httpHeaders;
};
}
- 请注意,这些 header 不适用于对执行器端点的
OPTIONS
请求,因此需要自定义ProbeEndpointsStrategy
或禁用 [=38=]OPTIONS
调用管理 URL 的安全性。此外,出于某种原因,我不得不禁用/actuator/health/**
的安全性,尽管它应该可以通过提供的自定义 header 访问:
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers(HttpMethod.OPTIONS, "/actuator/**").antMatchers(HttpMethod.GET, "/actuator/health/**");
}
- 最后,需要用自定义
RestTemplate
实例化ApplicationRegistrator
,这将是 pre-populated 和自定义 header:
@Bean
public ApplicationRegistrator registrator(ClientProperties client, ApplicationFactory applicationFactory) {
RestTemplateBuilder builder = new RestTemplateBuilder()
.setConnectTimeout(client.getConnectTimeout())
.setReadTimeout(client.getReadTimeout())
.additionalInterceptors((request, body, execution) -> {
request.getHeaders().set("X-CUSTOM", "My Custom Value");
return execution.execute(request, body);
});
if (client.getUsername() != null) {
builder = builder.basicAuthentication(client.getUsername(), client.getPassword());
}
return new ApplicationRegistrator(builder.build(), client, applicationFactory);
}