前言
本来想用一节就写完SpringBootAdmin的,但随着研究的深入发现一节应该是不够的,网上的资料也不会非常系统,官网的例子有些已经好几年没更新了,所以接下来还是系统性的来写下吧
第一节 完成基础配置,暴露所有端点
第二节 给SpringBootAdmin的server端加入spring security安全控制
第三节 给SpringBootAdmin的client端加入spring security安全控制
第四节 配置SpringBootAdmin日志管理
第五节 配置SpringBootAdmin电子邮件通知
一、加入spring security安全控制
加入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
重启后,再次访问,会跳转到login页面
二、配置server用户名密码
这里可以通过配置文件,内存或者数据库配置用户名密码,具体可以参考下spring security的相关文档。这里我们采用比较的配置文件配置
# admin server
spring.security.user.name=server
spring.security.user.password=server
重启后,就可以用这个账号密码登录了
登录成功后,可以看到登录的账号,但这个时候你会发现注册上来的client不见了。client端会报错如下:
at spring-boot-admin ([http://localhost:9090/instances]): 401 : [no body].
原因是server加入了安全控制,这里我们先配置SecurityConfig来实现访问。加入配置类
@Configuration(proxyBeanMethods = false)
public class SecurityConfig {@Beanprotected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {return http.authorizeHttpRequests((authorizeRequests) -> authorizeRequests.anyRequest().permitAll()).csrf().disable().build();}
}
再次启动server,发现client已经注册上来了。但是毕竟这个配置类太过暴力,直接所有的request都permitAll,接下来可以参考官方例子SecuritySecureConfig做下修改:
@Configuration(proxyBeanMethods = false)
public class SecurityConfig {@Beanprotected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();successHandler.setTargetUrlParameter("redirectTo");successHandler.setDefaultTargetUrl("/");return http.authorizeHttpRequests((authorizeRequests) -> authorizeRequests.requestMatchers(new AntPathRequestMatcher("/login")).permitAll().anyRequest().authenticated()).formLogin((formLogin) -> formLogin.loginPage("/login").successHandler(successHandler)) // <3>.logout((logout) -> logout.logoutUrl("/logout")).httpBasic(Customizer.withDefaults()).csrf().disable().build();}
}
改动以后顺便把登录界面也优化了:
登录以后,我们发现client又掉了,orz。接下来就需要配置下client端了。
配置client访问server的账号密码
修改client的配置文件:
# admin server accout
spring.boot.admin.client.username=server
spring.boot.admin.client.password=server
再重启client,现在client又可重新注册上来了。
至此server端的安全控制基本就配置完毕了。