Не определен bean-компонент с именем 'springSecurityFilterChain'. Java Config - PullRequest
0 голосов
/ 05 марта 2019

У меня есть класс, который должен инициализировать цепочку фильтров самостоятельно

public class SecurityWebApplicationInitializer
        extends AbstractSecurityWebApplicationInitializer {

}

, но все равно я получаю noSuchBeanDefinException.

Мой webSecurityConfig

@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[]{"/"};
    }
}

Я пытался использовать WebSecurityConfig.class в AppInit, но затем он показывает ошибку, из-за которой мой класс обслуживания, который автоматически подключается в SecurityConfig, не инициализируется, когда работает класс AppInit.Кроме того, каждый онлайн-пример делает то, что я делаю.Они просто используют SecurityWebApplicationInitializer.

1 Ответ

0 голосов
/ 12 марта 2019

Сначала - поместите WebSecurityConfig в

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

, а также добавьте пакет @componentScan ДЛЯ КАЖДОГО КОНФИГ. Моя ошибка заключалась в том, что я думал, что они знают друг о друге. Не угадай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...