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

Spring Security配置自定义认证后如何为Actuator端点单独加HTTP Basic认证

实现方案

Spring Boot 2.4.x版本可以通过配置两个带优先级的WebSecurityConfigurerAdapter实现路径隔离的安全策略,你之前配置失败大概率是没有指定优先级,或者没有对Actuator的配置做路径匹配限制,导致配置覆盖了原有全局逻辑。具体实现步骤如下:

步骤1:给原有安全配置设置优先级

给你现有的安全配置类添加@Order(2)注解,标记为低优先级的全局配置,原有代码逻辑无需修改:

@Configuration
@Order(2)
public class OriginalSecurityConfig extends WebSecurityConfigurerAdapter {
    // 你原来的配置代码保持不变
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.
            authorizeRequests()
            .antMatchers("/admin/**").hasAuthority(AUTHORITY_ADMIN)
            .antMatchers("/user/**").hasAnyAuthority(AUTHORITY_ADMIN, AUTHORITY_USER)
            .anyRequest().authenticated()
            .and()
            .csrf().disable()
            .formLogin()
            .loginPage("/login")
            .failureUrl("/login?error=true")
            .successHandler(new CustomUrlAuthenticationSuccessHandler(translator))
            .usernameParameter("username")
            .passwordParameter("password")
            .and()
            .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/")
            .and()
            .exceptionHandling().accessDeniedPage("/403")
            .and()
            .headers().frameOptions().sameOrigin();
    }
    // 其他原有逻辑比如CustomAuthenticationProvider注册保持不变
}

步骤2:新增Actuator专属安全配置

新增一个配置类,添加@Order(1)标记为高优先级,仅匹配/actuator/**路径,单独开启HTTP Basic认证:

@Configuration
@Order(1)
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {

    // 可配置到application.properties/application.yml中
    @Value("${actuator.auth.username:actuator}")
    private String actuatorUsername;
    @Value("${actuator.auth.password:your_secure_pwd}")
    private String actuatorPassword;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 仅匹配actuator路径,不影响其他接口
        http.antMatcher("/actuator/**")
                .authorizeRequests()
                .anyRequest().authenticated()
                // 开启HTTP Basic认证
                .and()
                .httpBasic()
                .and()
                .csrf().disable()
                // 无会话,适合接口调用场景
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

    // 配置Actuator专属认证账号,也可以根据需求复用你原来的CustomAuthenticationProvider
    @Bean
    @Qualifier("actuatorUserDetailsService")
    public UserDetailsService actuatorUserDetailsService() {
        UserDetails actuatorUser = User.withUsername(actuatorUsername)
                .password(PasswordEncoderFactories.createDelegatingPasswordEncoder().encode(actuatorPassword))
                .authorities("ACTUATOR_ADMIN")
                .build();
        return new InMemoryUserDetailsManager(actuatorUser);
    }
}

步骤3:配置认证参数

在application.properties中添加Actuator的认证账号配置:

# Actuator专属认证账号
actuator.auth.username=monitor_admin
actuator.auth.password=your_custom_secure_password

注意事项

  • 如果需要复用原有业务系统的账号访问Actuator,只需要删除ActuatorSecurityConfig中的actuatorUserDetailsService Bean,Spring会自动使用你原有配置的CustomAuthenticationProvider做认证
  • Spring Security的配置匹配逻辑是优先级从高到低依次匹配,一旦请求路径命中某个配置的匹配规则,就不会再走后续更低优先级的配置,因此必须给Actuator的配置加上antMatcher("/actuator/**")限制匹配范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:51:01