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

Spring Security 5.7弃用WebSecurityConfigurerAdapter后LDAP配置替换方案

Spring Security 5.7+ LDAP认证配置迁移方案

从Spring Security 5.7开始,WebSecurityConfigurerAdapter被正式标记为弃用,所有安全配置改为基于Bean注册的组件化方式实现,原有LDAP配置里的url()、managerDn()、managerPassword()、userSearchFilter()都有对应的Bean级实现,不存在功能缺失。

完整可直接替换的配置代码

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.authentication.ldap.LdapAuthenticationProvider;
import org.springframework.security.authentication.ldap.LdapAuthenticator;
import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
import org.springframework.security.ldap.authentication.BindAuthenticator;
import org.springframework.security.ldap.search.FilterBasedLdapUserSearch;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    /**
     * 对应原配置contextSource()节点下的url、managerDn、managerPassword参数
     */
    @Bean
    public DefaultSpringSecurityContextSource ldapContextSource() {
        DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource(url);
        contextSource.setUserDn("login");
        contextSource.setPassword("password");
        // 必须执行初始化方法,否则上下文源无法正常启动
        contextSource.afterPropertiesSet();
        return contextSource;
    }

    /**
     * 对应原配置的userSearchFilter参数,绑定用户搜索规则
     */
    @Bean
    public LdapAuthenticator ldapAuthenticator(DefaultSpringSecurityContextSource ldapContextSource) {
        BindAuthenticator authenticator = new BindAuthenticator(ldapContextSource);
        // 第一个参数为用户搜索基准DN,无特殊搜索路径需求直接传空字符串即可
        authenticator.setUserSearch(new FilterBasedLdapUserSearch("", usersFilter, ldapContextSource));
        return authenticator;
    }

    /**
     * 注册LDAP认证提供者,接入Spring Security认证链路
     */
    @Bean
    public LdapAuthenticationProvider ldapAuthenticationProvider(LdapAuthenticator ldapAuthenticator) {
        return new LdapAuthenticationProvider(ldapAuthenticator);
    }

    /**
     * 替代原继承WebSecurityConfigurerAdapter时的HTTP安全配置
     */
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http, LdapAuthenticationProvider ldapAuthenticationProvider) throws Exception {
        http
            // 把LDAP认证提供者加入安全框架的认证管理器列表
            .authenticationProvider(ldapAuthenticationProvider)
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            // 可根据自身需求替换为httpBasic、自定义登录接口等认证方式
            .formLogin(Customizer.withDefaults());
        return http.build();
    }
}

配置说明

  • 如果你需要指定LDAP用户搜索的基准路径(比如ou=systemUsers,dc=corp,dc=com),直接将路径填入FilterBasedLdapUserSearch构造方法的第一个参数即可,逻辑和旧版完全一致。
  • 旧版链式调用里支持的LDAP密码比对策略、用户权限映射、用户属性映射等配置,都可以通过对应Bean的set方法注入,不存在配置能力缺失。
  • 迁移后不需要再继承WebSecurityConfigurerAdapter类,所有安全能力都通过声明Bean的方式装配,这是Spring Security后续版本的标准配置范式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:18:19