Skip to content

configureGlobal on @SpringBootApplication fails #2473

Closed
@rwinch

Description

@rwinch

The following fails:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

@SpringBootApplication
public class HelloWebSecurityApplication {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
            throws Exception {
        // @formatter:off
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
        // @formatter:on
    }

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

We should allow Spring Security's Global Authentication to be configured from any class annotated with @EnableGlobalAuthentication, @EnableAutoConfiguration, or @SpringBootApplication. This can be done by adding the following:

@Configuration
@ConditionalOnClass(GlobalAuthenticationConfigurerAdapter.class)
public class BootGlobalAuthenticationConfiguration {

    @Bean
    public static BootGlobalAuthenticationConfigurationAdapter bootGlobalAuthenticationConfigurationAdapter(ApplicationContext context) {
        return new BootGlobalAuthenticationConfigurationAdapter(context);
    }

    private static class BootGlobalAuthenticationConfigurationAdapter extends GlobalAuthenticationConfigurerAdapter {
        private final ApplicationContext context;
        private static final Log logger = LogFactory.getLog(BootGlobalAuthenticationConfiguration.class);

        public BootGlobalAuthenticationConfigurationAdapter(ApplicationContext context) {
            this.context = context;
        }

        @Override
        public void init(AuthenticationManagerBuilder auth) {
            Map<String, Object> beansWithAnnotation = context.getBeansWithAnnotation(EnableAutoConfiguration.class);
            if(logger.isDebugEnabled()) {
                logger.debug("Eagerly initializing " + beansWithAnnotation);
            }
        }
    }
}

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions