Spring Security 6如何配置忽略静态资源文件夹?
Spring Security 6.x 正确配置忽略静态资源的解决方案
问题背景
我将公共Web资源(CSS、JS)存储在java/com/myapp/resources/static/**路径的static文件夹中,原Spring Security 5.x配置可正常运行,但升级至Spring Security 6.0.3版本后,WebSecurity.IgnoredRequestConfigurer不再提供antMatchers(String)方法,替换为requestMatchers后CSS文件仍无法加载。
原配置文件
SecurityConfig.java
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize .anyRequest().authenticated()) .formLogin(form -> form .loginPage("/login") .permitAll()); return http.build(); } @Bean public WebSecurityCustomizer webSecurityCustomizer() throws Exception { return (web) -> web.ignoring().antMatchers("/resources/static/**"); } }
ResourceConfig.java
@Configuration public class ResourceConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/static/"); } }
修改后仍失效的配置
@Bean public WebSecurityCustomizer webSecurityCustomizer() { return (web) -> web.ignoring().requestMatchers("/resources/static/**"); }
正确配置方案
问题核心是请求路径匹配错误,结合你的资源映射规则,可通过以下两种方式解决:
方案1:修正WebSecurity忽略的路径
根据ResourceConfig的配置,静态资源的实际访问路径是/static/**(而非/resources/static/**),调整requestMatchers的匹配路径即可:
@Bean public WebSecurityCustomizer webSecurityCustomizer() { return (web) -> web.ignoring() .requestMatchers("/static/**"); }
方案2:在SecurityFilterChain中直接放行(推荐)
Spring Security 6更推荐在SecurityFilterChain中统一配置资源权限,无需单独使用WebSecurityCustomizer:
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authorize -> authorize // 优先放行静态资源 .requestMatchers("/static/**").permitAll() // 其余请求需认证 .anyRequest().authenticated()) .formLogin(form -> form .loginPage("/login") .permitAll()); return http.build(); } }
可选优化:移除手动资源映射配置
Spring Boot默认已自动配置静态资源映射,classpath:/static/是默认的静态资源目录,访问路径即为/static/**,因此你可以直接删除ResourceConfig类,无需手动配置addResourceHandlers。
验证要点
- 确认静态资源文件存放在
src/main/resources/static/目录下(例如src/main/resources/static/css/style.css) - 访问时使用正确路径,如
http://localhost:8080/static/css/style.css - 若使用模板引擎(如Thymeleaf),引用资源时使用
@{/static/css/style.css}格式
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

