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中的actuatorUserDetailsServiceBean,Spring会自动使用你原有配置的CustomAuthenticationProvider做认证 - Spring Security的配置匹配逻辑是优先级从高到低依次匹配,一旦请求路径命中某个配置的匹配规则,就不会再走后续更低优先级的配置,因此必须给Actuator的配置加上
antMatcher("/actuator/**")限制匹配范围
内容的提问来源于stack exchange,提问作者sebasira
相关产品推荐
相关产品推荐

