【问题标题】:No bean named 'springSecurityFilterChain' is defined Java Config没有定义名为“springSecurityFilterChain”的 bean Java Config
【发布时间】:2019-03-05 12:49:41
【问题描述】:

我有一个应该自己初始化过滤器链的类

public class SecurityWebApplicationInitializer
        extends AbstractSecurityWebApplicationInitializer {

}

但我仍然得到 noSuchBeanDefinException。

我的网络安全配置

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled=true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserService userService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/admin/**")
                .access("hasRole('ADMIN')").and().formLogin()
                .loginPage("/login").failureUrl("/login?error")
                .usernameParameter("username")
                .passwordParameter("password")
                .and().logout().logoutSuccessUrl("/login?logout")
                .and().csrf()
                .and().exceptionHandling().accessDeniedPage("/403");
    }

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

这里是我的 AppInitialiser

public class WebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer {


    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { HibernateConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebMvcConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

我尝试在 AppInit 中使用 WebSecurityConfig.class,但随后显示一个错误,即我在 SecurityConfig 中自动装配的服务类在 AppInit 类工作时未初始化。 每个在线示例也都像我一样。他们只是使用 SecurityWebApplicationInitializer 。

【问题讨论】:

  • @Component注释SecurityWebApplicationInitializer会发生什么?
  • 没有任何变化。
  • 你是否为你的班级所在的包启用了@componentScan
  • 我的 componentScan 设置为整个项目。
  • 我试图重现你一直在做的事情。在将 WebSecurityContext 放入 getRootConfigClasses() 返回的类之前,我遇到了与您相同的错误。当您这样做时,是找不到 UserService 的错误,还是由于某种原因它在那个阶段无法工作 - 例如对之后初始化的数据库的依赖?

标签: java spring spring-mvc spring-security


【解决方案1】:

首先 - 将 WebSecurityConfig 放入

@Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { HibernateConfig.class};
    }

并为您拥有的每个 CONFIG 类添加 @componentScan 包。我的错误是我认为他们彼此了解。猜不到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多