Spring安全配置未应用

时间:2016-10-27 14:20:22

标签: java spring spring-security

我正在开发一个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安全上下文,但不会应用我的配置。那是为什么?

1 个答案:

答案 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 { }