如何配置Spring Boot对接WebLogic中已配置的LDAP认证提供者?
Spring Boot 2.7.x 对接WebLogic LDAP认证的SecurityFilterChain配置
核心思路
因为要对接WebLogic已配置好的LDAP认证提供者,无需直接连接AD,而是让WebLogic处理LDAP认证逻辑,Spring Security只需对接WebLogic的认证上下文即可。这里采用预认证过滤器模式结合Spring Security的SecurityFilterChain实现。
配置步骤
1. 依赖确认
确保pom.xml中包含Spring Security核心依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2. SecurityFilterChain配置类
创建配置类,完全替代WebLogicConfigurerAdapter的配置方式:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider; import org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter; @Configuration @EnableWebSecurity public class WebLogicLdapSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http // 根据业务场景调整CSRF配置,REST接口可禁用,页面服务建议保留 .csrf().disable() // 配置请求授权规则 .authorizeHttpRequests(auth -> auth .anyRequest().authenticated() ) // 添加WebLogic预认证过滤器,优先级高于默认预认证过滤器 .addFilterBefore(weblogicAuthFilter(), AbstractPreAuthenticatedProcessingFilter.class) // 绑定预认证提供者,验证WebLogic传递的用户信息 .authenticationProvider(preAuthenticatedAuthenticationProvider()); return http.build(); } // 从WebLogic传递的请求头中获取已认证用户名 @Bean public RequestHeaderAuthenticationFilter weblogicAuthFilter() { RequestHeaderAuthenticationFilter filter = new RequestHeaderAuthenticationFilter(); // WebLogic默认将认证后的用户名放入REMOTE_USER请求头 filter.setPrincipalRequestHeader("REMOTE_USER"); // 若请求头缺失,允许后续过滤器继续执行(根据业务需求调整) filter.setExceptionIfHeaderMissing(false); return filter; } // 预认证提供者,处理用户信息与权限加载 @Bean public PreAuthenticatedAuthenticationProvider preAuthenticatedAuthenticationProvider() { PreAuthenticatedAuthenticationProvider provider = new PreAuthenticatedAuthenticationProvider(); // 自定义用户详情服务,可从WebLogic或内部系统拉取权限 provider.setPreAuthenticatedUserDetailsService((token) -> { String username = token.getName(); // 示例:返回包含用户名和基础权限的UserDetails对象 return org.springframework.security.core.userdetails.User.withUsername(username) .password("") // WebLogic已完成认证,无需校验密码 .authorities("ROLE_USER") // 实际场景可从WebLogic或数据库查询权限 .build(); }); return provider; } }
3. weblogic.xml配置补充
确保WEB-INF/weblogic.xml中配置WebLogic的认证约束,强制请求走LDAP认证流程:
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/14.1/weblogic-web-app.xsd"> <!-- 关联WebLogic中配置的myrealm --> <security-role-assignment> <role-name>User</role-name> <principal-name>myrealm</principal-name> </security-role-assignment> <!-- 配置所有资源的安全约束 --> <security-constraint> <web-resource-collection> <web-resource-name>All Resources</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>User</role-name> </auth-constraint> </security-constraint> <!-- 指定认证方式,与WebLogic myrealm配置一致 --> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.html</form-login-page> <form-error-page>/error.html</form-error-page> </form-login-config> </login-config> </weblogic-web-app>
关键说明
- 预认证逻辑:WebLogic先完成LDAP认证,将已通过验证的用户名通过请求头传递给Spring Boot,Spring Security仅做用户合法性校验和权限加载。
- 权限扩展:如果需要从WebLogic获取用户角色或权限,可以通过WebLogic的JNDI API或内部接口查询,替换示例中的权限赋值代码。
- 请求头自定义:若WebLogic使用其他请求头传递用户名,修改
setPrincipalRequestHeader的参数即可适配。
内容的提问来源于stack exchange,提问作者jumping_monkey
相关产品推荐
相关产品推荐

