복붙노트

[SPRING] 스프링 부트 2 보안 기본 인증

SPRING

스프링 부트 2 보안 기본 인증

왜 다음 기본 보안 구성은 inMemoryAuthentication () 절을 적용하지 않습니까?

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .httpBasic()
            .and()
            .authorizeRequests()
            .anyRequest().authenticated();
        super.configure(http);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("username").password("password");
        super.configure(auth);
    }

}

응용 프로그램을 초기화 한 후에도 Spring 자체에서 생성 된 기본 사용자 만 남아 있으며 username과 같은 사용자는 없습니다.

해결법

  1. ==============================

    1.void configure (AuthenticationManagerBuilder auth)에서 super 메소드를 호출하지 마십시오. disableLocalConfigureAuthenticationBldr 플래그를 true로 설정하면 AuthenticationManagerBuilder가 무시됩니다. 마지막으로 void configure (AuthenticationManagerBuilder auth) 메소드는 다음과 같아야합니다.

    void configure (AuthenticationManagerBuilder auth)에서 super 메소드를 호출하지 마십시오. disableLocalConfigureAuthenticationBldr 플래그를 true로 설정하면 AuthenticationManagerBuilder가 무시됩니다. 마지막으로 void configure (AuthenticationManagerBuilder auth) 메소드는 다음과 같아야합니다.

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("username").password("password").roles("USER");
    }
    
  2. ==============================

    2.스프링 부트 2.x에서는 여기 및 여기에 설명 된대로 고유 한 UserDetailsService를 구현해야합니다.

    스프링 부트 2.x에서는 여기 및 여기에 설명 된대로 고유 한 UserDetailsService를 구현해야합니다.

    예:

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        private static final Logger log = LogManager.getLogger();
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            // Note: 
            // Use this to enable the tomcat basic authentication (tomcat popup rather than spring login page)
            // Note that the CSRf token is disabled for all requests
            log.info("Disabling CSRF, enabling basic authentication...");
            http
            .authorizeRequests()
                .antMatchers("/**").authenticated() // These urls are allowed by any authenticated user
            .and()
                .httpBasic();
            http.csrf().disable();
        }
    
        @Bean
        public UserDetailsService userDetailsService() {
            // Get the user credentials from the console (or any other source): 
            String username = ...
            String password = ...
    
            // Set the inMemoryAuthentication object with the given credentials:
            InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
            String encodedPassword = passwordEncoder().encode(password);
            manager.createUser(User.withUsername(username).password(encodedPassword).roles("USER").build());
            return manager;
        }
    
        @Bean
        public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
    }  
    
  3. from https://stackoverflow.com/questions/49543394/spring-boot-2-security-basic-authentication by cc-by-sa and MIT license