Spring Boot 2.0.0.M4在application.yml中打破了http basic auth

时间:2017-10-25 00:56:27

标签: spring-boot spring-security

Spring Boot 1.5.6.RELEASE尊重我的application.yml中指定的basic-auth用户名和密码。

我已升级到2.0.0.M4,现在应用程序始终以默认的'用户'并随机生成密码。基本上,以下设置始终完全被忽略。

我看到发行说明/ doc中的一些更改,特别是为了简化执行器安全性启用/禁用。我没有看到任何特定的内容。

有什么想法吗?

来自我的application.yml

security:
  basic:
    enabled: true
    realm: some-service
  user:
    name: example_user
    password: example_password

更新

我已经确认此功能刚刚从Spring Boot 2.0.0.M4开始取消

在附录中:

M4参考文献中缺少所有security.basic。*系列内容:

https://docs.spring.io/spring-boot/docs/2.0.0.M4/reference/html/common-application-properties.html

但是这里出现在M3参考文献中:

https://docs.spring.io/spring-boot/docs/2.0.0.M3/reference/html/common-application-properties.html

我能够暂时降级到M3以恢复之前的功能,但仍然会对取代它的内容有所了解。在这种情况下,我只需要一个硬编码的basic-auth用户。我知道我可以使用对象配置来进行更复杂的设置。

1 个答案:

答案 0 :(得分:1)

编辑2018-01-31:

从Spring Boot 2.0.0-RC1(source)开始,已恢复(通过spring.security.user配置键)自动配置单个用户的能力。

原始回答:

从Spring Boot 2.0.0-M4开始,不推荐使用Spring Boot security.*属性。您可以在 Release Notes

中了解相关信息
  

安全自动配置已经完全重新审视:开发人员应该阅读the companion blog post并参阅Spring Boot 2.0 Security wiki page以获取有关更改的更多详细信息。

为了恢复基本身份验证功能,您可以注册自定义WebSecurityConfigurerAdapter,如下所示:

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Bean
    public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
        return new InMemoryUserDetailsManager(
                User.withDefaultPasswordEncoder().username("user").password("password")
                        .authorities("ROLE_USER").build(),
                User.withDefaultPasswordEncoder().username("admin").password("admin")
                        .authorities("ROLE_ACTUATOR", "ROLE_USER").build());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .requestMatchers(EndpointRequest.to("health", "info")).permitAll()
                .requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ACTUATOR")
                .requestMatchers(StaticResourceRequest.toCommonLocations()).permitAll()
                .antMatchers("/**").hasRole("USER")
                .and()
            .cors()
                .and()
            .httpBasic();
    }

}

(这也将为Actuator端点配置基本auth)

如果您还需要从.properties文件中读取用户名和密码,则只需使用@Value注释注入值即可。