在上一篇中,我们学习了SpringBootAdmin 客户端的配置,这一章我们来学习 Service的配置,以及安全认证。
在前端代理服务器后面运行
如果Spring Boot Admin服务器在反向代理后面运行,则可能需要通过(spring.boot.admin.ui.public-url)配置可访问该服务器的公共URL 。另外,当反向代理终止https连接时,可能有必要进行配置server.forward-headers-strategy=native
配置选项
名称 | 描述 | 默认值 |
spring.boot.admin.context-path | 上下文路径在应为Admin Server的静态资产和API提供服务的路径的前面加上前缀。相对于Dispatcher-Servlet。 | |
spring.boot.admin.monitor.status-interval | 检查实例状态的时间间隔。 | 10,000毫秒 |
spring.boot.admin.monitor.status-lifetime | 终身身份。只要最后一个状态没有过期,该状态就不会更新。 | 10,000毫秒 |
spring.boot.admin.monitor.info-interval | 检查实例信息的时间间隔。 | 1m |
spring.boot.admin.monitor.info-lifetime | 信息的生命周期。只要最后一个信息没有过期,该信息就不会被更新。 | 1m |
spring.boot.admin.monitor.default-timeout | 发出请求时的默认超时。可以使用覆盖特定端点的各个值 | 10,000 |
spring.boot.admin.monitor.timeout。* | 每个EndpointId都有超时的键值对。默认为默认超时。 | |
spring.boot.admin.monitor.default-retries | 失败请求的默认重试次数。修改请求( | 0 |
spring.boot.admin.monitor.retries。* | 键值对,具有每个endpointId的重试次数。默认为默认重试。修改请求( | |
spring.boot.admin.metadata键进行清理 | 与这些正则表达式模式匹配的键的元数据值将在所有json输出中被清除。 |
|
spring.boot.admin.probed端点 | 对于Spring Boot 1.x客户端应用程序,SBA使用OPTIONS请求探测指定的端点。如果路径与id不同,则可以将其指定为id:path(例如health:ping)。 |
|
spring.boot.admin.instance-auth.enabled | 启用从Spring配置属性中提取凭证 |
|
spring.boot.admin.instance-auth.default-user-name | 用于验证注册服务的默认用户名。该 |
|
spring.boot.admin.instance-auth.default-user-password | 用于验证注册服务的默认用户密码。该 |
|
spring.boot.admin.instance-auth.service-map。*。用户名 | 用于使用指定名称对注册的服务进行身份验证的用户名。该 | |
spring.boot.admin.instance-auth.service-map。*。用户密码 | 用户密码,用于使用指定名称对注册的服务进行身份验证。该 | |
spring.boot.admin.instance-proxy.ignored-headers | 向客户提出请求时,不转发标题。 |
|
spring.boot.admin.ui.public-url | 用于在ui中构建基本href的基本URL。 | 如果在反向代理后面运行(使用路径重写),则可以用来进行正确的自我引用。如果省略主机/端口,将从请求中推断出来。 |
spring.boot.admin.ui.brand | 要在导航栏中显示的品牌。 |
|
spring.boot.admin.ui.title | 要显示的页面标题。 |
|
spring.boot.admin.ui.login-icon | 在登录页面上用作图像的图标。 |
|
spring.boot.admin.ui.favicon | 用作默认图标的图标,用于桌面通知的图标。 |
|
spring.boot.admin.ui.favicon-danger | 当一项或多项服务关闭并用作桌面通知时,用作收藏夹图标。 |
|
启用spring.boot.admin.ui.remember-me | 切换为在登录页面上显示/隐藏“记住我”复选框。 |
|
spring.boot.admin.ui.poll-timer.cache | 以毫秒为单位的轮询持续时间,以获取新的缓存数据。 |
|
spring.boot.admin.ui.poll-timer.datasource | 以毫秒为单位的轮询持续时间,以获取新的数据源数据。 |
|
spring.boot.admin.ui.poll-timer.gc | 以毫秒为单位的轮询持续时间,以获取新的gc数据。 |
|
spring.boot.admin.ui.poll-timer.process | 以毫秒为单位的轮询持续时间,以获取新的过程数据。 |
|
spring.boot.admin.ui.poll-timer.memory | 以毫秒为单位的轮询持续时间,以获取新的内存数据。 |
|
spring.boot.admin.ui.poll-timer.threads | 以毫秒为单位的轮询持续时间,以获取新的线程数据。 |
|
安全认证
服务端加入安全认证,登录授权
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
application.properties:
spring.security.user.name=admin
spring.security.user.password=admin
配置登录的用户名和密码
代码配置:
@Configuration(proxyBeanMethods = false)
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final AdminServerProperties adminServer;
private final SecurityProperties security;
public SecuritySecureConfig(AdminServerProperties adminServer, SecurityProperties security) {
this.adminServer = adminServer;
this.security = security;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(this.adminServer.path("/"));
http.authorizeRequests(
(authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll() // <1>
.antMatchers(this.adminServer.path("/actuator/info")).permitAll()
.antMatchers(this.adminServer.path("/actuator/health")).permitAll()
.antMatchers(this.adminServer.path("/login")).permitAll().anyRequest().authenticated() // <2>
).formLogin(
(formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() // <3>
).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults()) // <4>
.csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) // <5>
.ignoringRequestMatchers(
new AntPathRequestMatcher(this.adminServer.path("/instances"),
HttpMethod.POST.toString()), // <6>
new AntPathRequestMatcher(this.adminServer.path("/instances/*"),
HttpMethod.DELETE.toString()), // <6>
new AntPathRequestMatcher(this.adminServer.path("/actuator/**")) // <7>
))
.rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600));
}
}
服务端代码配置好之后,在客户也需要定义 连接的服务端的用户名和密码,客户端连接配置
application.properties: 加入连接的用户名和密码
#连接admin 服务端:
spring.boot.admin.client.url=http://localhost:8080
spring.boot.admin.client.username=admin
spring.boot.admin.client.password=admin
不加入这个,客服端无法连接服务端,请注意。
配置好之后,启动服务端项目,访问出现登录界面,说明安全认证配置成功了。
说明配置成功了,服务端的其他配置项,大家就自己搭建玩就好了。