【发布时间】: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