我正在开发一个Spring项目。功能已经完成。缺少的是安全上下文。 由于我的项目(maven)在不同的子项目(服务,RestControllers,域)中分开,我希望安全配置也是一个单独的子项目,我只需要添加为主应用程序的依赖项来激活它。
我从一个非常基本的配置开始,到目前为止,这是安全子项目中唯一的类:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin")
.password("admin1")
.roles("ADMIN", "USER");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/").permitAll().and().authorizeRequests().anyRequest().authenticated();
}
}
一旦我将此项目作为依赖项添加到我的主应用程序,安全上下文显然会被激活,因为弹出了默认的弹出登录对话框。问题是,Spring忽略了我在SecurityConfiguration
中定义的配置。它甚至不允许我访问' /'或者它都不允许我使用已定义的用户登录。检查调试模式,它永远不会运行public void configure(AuthenticationManagerBuilder auth)
方法。
坚果壳: 它会激活spring安全上下文,但不会应用我的配置。那是为什么?
答案 0 :(得分:0)
对于使用基于Java的配置的Spring MVC项目,将SecurityConfiguration导入ApplicationConfiguration
@EnableWebMvc
@Configuration
@ComponentScan({"xx.xxx.xx.*"})
@PropertySource("classpath:xxx.properties")
@Import(value = {SecurityConfiguration.class}) // <= like this
public class ApplicationConfiguration extends WebMvcConfigurerAdapter { ... }
您可能还需要SecurityInitializer。即使它是空的,这个类也必须存在。对于必须在安全配置之前执行的某些过滤器,这是一个好地方。
import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer { }