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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:13:17