Spring Boot Admin Consul集成

一、Spring Boot Admin客户端Consul配置

spring:
  application:
    name: admin-client
  cloud:
    config:
      enabled: false
    consul:
      host: localhost
      port: 8500
      discovery:
        tags: user.name=user, user.password=password
  boot:
    admin:
      discovery:
        ignored-services: consul
server:
  port: 8767
  
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS

二、Spring Boot Admin集成Spring Security

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");
        successHandler.setDefaultTargetUrl(this.adminContextPath + "/");

        http.authorizeRequests((authorizeRequests) -> authorizeRequests
            .antMatchers(this.adminContextPath + "/assets/**").permitAll()
            .antMatchers(this.adminContextPath + "/login").permitAll().anyRequest().authenticated())
            .formLogin((formLogin) -> formLogin.loginPage(this.adminContextPath + "/login")
            .successHandler(successHandler))
            .logout((logout) -> logout.logoutUrl(this.adminContextPath + "/logout"))
            .httpBasic(Customizer.withDefaults())
            .csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                 .ignoringRequestMatchers(
                     new AntPathRequestMatcher(this.adminContextPath + "/instances",
    HttpMethod.POST.toString()),
                     new AntPathRequestMatcher(this.adminContextPath + "/instances/*",
    HttpMethod.DELETE.toString()),
                     new AntPathRequestMatcher(this.adminContextPath + "/actuator/**")));
    }
}

三、自定义通知

public class CustomNotifier extends AbstractEventNotifier {

  private static final Logger LOGGER = LoggerFactory.getLogger(LoggingNotifier.class);

  public CustomNotifier(InstanceRepository repository) {
    super(repository);
  }

  @Override
  protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
    return Mono.fromRunnable(() -> {
      if (event instanceof InstanceStatusChangedEvent) {
        LOGGER.info("Instance {} ({}) is {}", instance.getRegistration().getName(), event.getInstance(),
            ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
      }
      else {
        LOGGER.info("Instance {} ({}) {}", instance.getRegistration().getName(), event.getInstance(),
            event.getType());
      }
    });
  }

}
1 声望
0 粉丝
0 条评论
1 声望
0 粉丝
宣传栏