第二节 给SpringBootAdmin的server端加入spring security安全控制

前言

本来想用一节就写完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页面
第二节 给SpringBootAdmin的server端加入spring security安全控制_第1张图片

二、配置server用户名密码

这里可以通过配置文件,内存或者数据库配置用户名密码,具体可以参考下spring security的相关文档。这里我们采用比较的配置文件配置

# admin server
spring.security.user.name=server
spring.security.user.password=server

重启后,就可以用这个账号密码登录了
第二节 给SpringBootAdmin的server端加入spring security安全控制_第2张图片登录成功后,可以看到登录的账号,但这个时候你会发现注册上来的client不见了。client端会报错如下:

at spring-boot-admin ([http://localhost:9090/instances]): 401 : [no body].

原因是server加入了安全控制,这里我们先配置SecurityConfig来实现访问。加入配置类

@Configuration(proxyBeanMethods = false)
public class SecurityConfig {
    @Bean
    protected 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 {
    @Bean
    protected 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();
    }
}

改动以后顺便把登录界面也优化了:
第二节 给SpringBootAdmin的server端加入spring security安全控制_第3张图片登录以后,我们发现client又掉了,orz。接下来就需要配置下client端了。

配置client访问server的账号密码

修改client的配置文件:

# admin server accout
spring.boot.admin.client.username=server
spring.boot.admin.client.password=server

再重启client,现在client又可重新注册上来了。
第二节 给SpringBootAdmin的server端加入spring security安全控制_第4张图片

至此server端的安全控制基本就配置完毕了。

你可能感兴趣的:(sbvadmin-cloud,spring,java,后端)