无法覆盖spring boot&#s;(默认)安全配置

时间:2016-06-28 09:38:51

标签: spring-security spring-boot

我正在尝试使用Spring安全性来保护Spring启动REST应用程序以进行基本身份验证。

默认的基本身份验证只需插入以下依赖项

即可
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

下一步是使用一些自定义凭据(用户名,密码)覆盖Spring启动提供的默认身份验证凭据。

我试过这个:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    @Autowired
    public void configure (AuthenticationManagerBuilder authBuilder) throws Exception {

        authBuilder.inMemoryAuthentication()
            .withUser("aide").password("aide").roles("USER").and()
            .withUser("pervacio").password("pervacio").roles("ADMIN");
    }

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

        http.httpBasic().and()
            .authorizeRequests()
                .antMatchers(HttpMethod.POST, "/search").hasRole("ADMIN")
            .and().csrf().disable();
    }
}

这是我的控制器:

@RestController
@SpringBootApplication
public class Controller {

    // request mappings and other code here

    public static void main(String[] args) {
        SpringApplication.run(Controller.class, args);
    }
}

我遇到的问题是我无法使用自定义凭据覆盖默认凭据。

我该怎么做?

SO上的其他帖子建议使用configure注释Autowired方法,但这对我不起作用。

我做错了什么?我按照official example

尝试了上述方法

1 个答案:

答案 0 :(得分:1)

我意识到的问题是SecurityConfiguration的位置(或包)。

默认情况下,

@ComponentScan注释(包含在@SpringBootApplication的一部分中)扫描定义它的同一包中的组件。

因此,有两种解决方案:a)将配置移动到定义注释的同一个包中b)配置注释以扫描放置配置的包中的组件

就我而言,与我的应用程序类相比,上面的SecurityConfiguration文件位于不同的包中。

解决方案a

包括以下注释:

@ComponentScan({"<security-package-name>"})

并插入具有安全配置的软件包的名称。

解决方案b

将Java配置类移动到与应用程序类相同的包中。