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

非Spring Boot的Spring应用中DefaultSecurityFilterChain为空致接口未受保护

问题分析与解决方案

核心原因

日志显示[org.springframework.security.web.DefaultSecurityFilterChain] Will not secure any request,本质是Spring Security的过滤器链未被Servlet容器加载。非Spring Boot环境不会自动完成Spring Security与Servlet容器的绑定,必须手动配置关键的代理过滤器,否则Spring Security的认证规则无法作用于请求。

非Spring Boot环境下Spring Security标准配置步骤

1. 配置web.xml,注册Spring Security核心代理过滤器

这是最关键的一步,必须在web.xml中添加DelegatingFilterProxy,它负责将请求转发到Spring容器中的springSecurityFilterChain bean(Spring Security默认的过滤器链实例)。

<!-- Spring Security核心过滤器代理 -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <!-- 匹配所有请求,确保所有接口都被保护 -->
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 加载Spring上下文配置 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <!-- 指定你的Spring配置文件路径 -->
    <param-value>/WEB-INF/context.xml</param-value>
</context-param>

2. 确保Spring上下文加载Security配置类

在context.xml中,通过组件扫描或直接注册bean的方式,让Spring容器加载你的SecurityConfiguration类:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 扫描包含SecurityConfiguration的包 -->
    <context:component-scan base-package="com.yourcompany.config"/>

    <!-- 或者直接注册配置类bean(二选一即可) -->
    <!-- <bean class="com.yourcompany.config.SecurityConfiguration"/> -->
</beans>

3. 完善SecurityConfiguration配置

确保配置类上添加@EnableWebSecurity注解,并重写必要的配置方法:

package com.yourcompany.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // 示例:内存用户认证,生产环境建议替换为数据库/LDAP认证
        auth.inMemoryAuthentication()
                .passwordEncoder(new BCryptPasswordEncoder())
                .withUser("user")
                .password(new BCryptPasswordEncoder().encode("password"))
                .roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated() // 所有请求必须认证
                .and()
                .httpBasic(); // 开启HTTP Basic认证
    }
}

额外注意事项

  • 依赖检查:确保项目引入了spring-security-web和spring-security-config依赖,版本与Spring核心框架版本匹配。
  • 密码编码:生产环境禁止使用{noop}明文密码,必须使用标准密码编码器(如BCryptPasswordEncoder)。
  • 日志验证:部署后查看日志,确认springSecurityFilterChain bean已被Spring容器加载,且过滤器映射生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:45:40