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

如何扩展其他Jar包中的Spring Security配置并新增额外认证用户

Spring Security 不修改公共依赖扩展内存用户解决方案

以下两种方案均无需修改公共依赖包源码,可直接在第二个项目中实现:

方案1:继承原有配置类+排除原有配置实例化(最简洁,复用全部原有安全规则)

  1. 在第二个项目的启动类上通过组件扫描排除公共包的原有配置类,避免重复注册过滤器链:
@SpringBootApplication
@ComponentScan(excludeFilters = @ComponentScan.Filter(
        type = FilterType.ASSIGNABLE_TYPE,
        classes = AuthConfiguration.class
))
public class YourSecondProjectApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourSecondProjectApplication.class, args);
    }
}
  1. 自定义配置类继承公共包的AuthConfiguration,重写用户配置方法追加新用户:
@Configuration
@EnableWebSecurity
public class ExtendedAuthConfiguration extends AuthConfiguration {

    @Override
    protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception {
        // 加载原有公共配置定义的FOO用户
        super.configure(authManagerBuilder);
        // 追加新增用户
        User.UserBuilder users = User.withDefaultPasswordEncoder();
        authManagerBuilder.inMemoryAuthentication()
                .withUser(users.username("FOO2").password("BAR").roles("USER").build());
    }
}

方案2:新增独立认证提供者(无需修改组件扫描规则)

利用Spring Security认证链自动聚合所有AuthenticationProvider的特性,新增独立的用户认证逻辑,和原有配置完全无冲突:

@Configuration
public class AdditionalUserConfig {

    // 定义新增用户的内存管理器
    @Bean
    public UserDetailsService additionalUserDetailsService() {
        User.UserBuilder users = User.withDefaultPasswordEncoder();
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(users.username("FOO2").password("BAR").roles("USER").build());
        return manager;
    }

    // 注册新增用户对应的认证提供者
    @Bean
    public AuthenticationProvider additionalAuthenticationProvider() {
        DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
        provider.setUserDetailsService(additionalUserDetailsService());
        // 和原有配置保持相同的密码编码器
        provider.setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
        return provider;
    }
}

该方案原理为:Spring Security的ProviderManager会遍历所有注册的认证提供者,只要任意一个认证通过就算请求认证成功,原有用户和新增用户分别走独立的认证逻辑,不会出现实例覆盖问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:45:06