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

Spring Boot 3 SecurityFilterChain配置问题:/home无法匿名访问

问题分析与解决方案

核心问题是你的securityFilterChain方法没有添加@Bean注解,Spring无法识别并加载这个安全过滤链配置,导致Spring Security启用了默认规则——所有请求都需要认证,所以访问/home会被重定向到登录页。

另外,你的授权规则写法可以优化,避免多次调用authorizeHttpRequests(),保持配置的连贯性。

修正后的完整代码

package xxxxxxxxxxxxx

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.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public UserDetailsService userDetailsService(PasswordEncoder encoder) {
        UserDetails admin = User.withUsername("admin")
                .password(encoder.encode("pass"))
                .roles("ADMIN")
                .build();

        UserDetails user1 = User.withUsername("user1")
                .password(encoder.encode("pass1"))
                .roles("USER")
                .build();

        return new InMemoryUserDetailsManager(admin,user1);
    }

    // 添加@Bean注解,让Spring加载这个配置
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http.csrf().disable()
                .authorizeHttpRequests(auth -> auth
                        .requestMatchers("/home").permitAll() // 允许所有人访问/home
                        .requestMatchers("/item/**").authenticated() // /item/**需要认证
                        .anyRequest().authenticated() // 其他所有请求都需要认证(可选,根据需求调整)
                )
                .formLogin() // 启用表单登录
                .and()
                .build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}

额外注意事项

  • 确保你的/home接口路径和配置中的完全一致,比如是否存在大小写问题、是否有额外的上下文路径(如果Spring Boot配置了server.servlet.context-path)。
  • Spring Security的授权规则是从上到下匹配,所以要把宽松的规则(比如permitAll)放在严格规则(比如authenticated)前面,否则会被后面的规则覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:39:36