You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Admin Client无法注册至开启Basic Auth的Admin Server问题

问题分析与解决方案

你的核心问题是开启Spring Security Basic Auth后,Spring Boot Admin Client无法注册到Server,返回401 Unauthorized。问题根源有两个:


问题1:Spring Security默认拒绝明文密码

Spring Boot 2.x及以上版本中,Spring Security强制要求用户密码必须是加密格式(如BCrypt),你的Admin Server配置的是明文密码admin@123,会直接导致客户端的Basic Auth验证失败。

问题2:未配置Spring Security放行注册端点

默认Spring Security会保护所有HTTP端点,包括Admin Server的/instances注册端点;同时CSRF保护会拦截客户端发送的POST注册请求,进一步导致认证失败。


解决方案

步骤1:加密Admin Server的用户密码

  1. 生成BCrypt加密后的密码:
    可以通过以下代码生成(或使用BCrypt在线工具):
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    
    public class PasswordGenerator {
        public static void main(String[] args) {
            BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
            System.out.println(encoder.encode("admin@123"));
        }
    }
    
  2. 修改Admin Server的application.yml,替换为加密后的密码:
    spring:
      security:
        user:
          name: admin
          password: $2a$10$[你的BCrypt加密字符串]
      application:
        name: spring-boot-admin
    
    server:
      port: 8081
    

步骤2:添加Spring Security配置类

在Admin Server项目中创建Security配置类,放行注册端点并禁用CSRF:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import de.codecentric.boot.admin.server.config.AdminServerProperties;

@Configuration
@EnableWebSecurity
public class AdminServerSecurityConfig {

    private final String adminContextPath;

    public AdminServerSecurityConfig(AdminServerProperties adminServerProperties) {
        this.adminContextPath = adminServerProperties.getContextPath();
    }

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                // 允许客户端注册的POST请求
                .antMatchers(adminContextPath + "/instances").permitAll()
                // 允许Admin Server自身监控端点访问
                .antMatchers(adminContextPath + "/actuator/**").permitAll()
                // 其他所有请求需要认证(保护Admin UI)
                .anyRequest().authenticated()
            )
            // 启用Basic Auth,适配客户端认证方式
            .httpBasic()
            // 禁用CSRF,避免拦截客户端的POST注册请求
            .and().csrf().disable();

        return http.build();
    }
}

步骤3:确认客户端配置

确保Client的application.yml中用户名密码与Server端完全一致:

spring:
  boot:
    admin:
      client:
        url: http://localhost:8081
        username: admin
        password: admin@123
management:
  endpoints:
    web:
      exposure:
        include: loggers, health, info, metrics
  endpoint:
    loggers:
      enabled: true
    health:
      show-details: always

验证

重启Admin Server和Client,查看Client日志会显示注册成功的记录,同时Admin Server的UI中能看到Client实例已上线。

内容的提问来源于stack exchange,提问作者Mudit Shukla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:17:52