使用getRootConfigClasses和getServletConfigClasses,报错No bean named ‘springSecurityFilterChain‘ available

前言

在Spring Boot和Spring MVC的应用中,getRootConfigClasses() 和 getServletConfigClasses() 是Spring Boot内部使用的两个方法,特别是在使用Java配置(Java-based Configuration)和嵌入式Servlet容器时。然而,这两个方法并不是Spring Boot用户通常直接调用的,它们更多地是在Spring Boot的自动配置和启动过程中被内部框架使用。


1、getRootConfigClasses() 和 getServletConfigClasses() 的区别?

  • getRootConfigClasses():这个方法通常用于定义根应用上下文(Root
    ApplicationContext)中的配置类。根应用上下文是所有子上下文(如Servlet应用上下文)的父上下文,它通常包含那些不特定于Servlet
    API的bean,如数据源(DataSource)、JPA配置等。
  • getServletConfigClasses():这个方法用于定义Servlet应用上下文(Servlet
    ApplicationContext)中的配置类。Servlet应用上下文是特定于Web应用的,它包含那些与Servlet
    API紧密相关的bean,如视图解析器(View Resolvers)、控制器(Controllers)等。

2、报错 “No bean named ‘springSecurityFilterChain’ available” 的原因

这个错误通常发生在Spring Security被集成到Spring Boot应用中时,但Spring Security的配置没有正确设置。尽管你的MainConfiguration中只配置了数据源,WebConfiguration中配置了Thymeleaf,而SecurityConfiguration中什么都没写,但如果你在其他地方(如启动类上通过@EnableWebSecurity注解)启用了Spring Security,或者你的项目中包含了Spring Security的依赖,Spring Boot会尝试自动配置Spring Security。

然而,由于SecurityConfiguration中没有提供必要的配置(比如配置HTTP安全策略),Spring Security无法创建一个名为springSecurityFilterChain的bean,这是Spring Security用于处理所有安全请求的过滤器链。

3.解决方案

如果你不打算使用Spring Security:

  • 确保你的项目中没有包含Spring Security的依赖。
  • 如果已经包含,请从pom.xml或build.gradle中移除它。

如果你打算使用Spring Security:

  • 在SecurityConfiguration类中配置你的安全策略。

  • 使用@EnableWebSecurity注解来启用Spring Security。

  • 配置HTTP安全,例如:
    代码如下(示例):

@Configuration  
@EnableWebSecurity  
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {  
    @Override  
    protected void configure(HttpSecurity http) throws Exception {  
        http  
            .authorizeRequests()  
            .antMatchers("/").permitAll()  
            .anyRequest().authenticated()  
            .and()  
            .formLogin()  
            .loginPage("/login")  
            .permitAll()  
            .and()  
            .logout()  
            .permitAll();  
    }  
}

确保你的配置类被Spring Boot扫描到(通常是通过将其放在主应用类所在包或其子包中)。这样,Spring Boot才能正确地创建和管理springSecurityFilterChain bean。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值