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
相关产品推荐
相关产品推荐

