더북(TheBook)

3.1.2 사용자 정의 보안 구성하기

자동 구성을 오버라이드하는 것은 자동 구성이 없는 상황에서 필요한 구성을 작성하는 것처럼 간단하다. 명시적인 구성은 XML 구성과 그루비 구성을 포함하여 스프링이 지원하는 구성 방식이면 된다.

목적에 맞게 명시적으로 구성할 때는 자바 기반 구성을 중점적으로 살펴본다. 스프링 시큐리티의 자동 구성을 오버라이드할 때는 WebSecurityConfigurerAdapter를 확장해서 구성 클래스를 작성한다. 코드 3-1의 SecurityConfig는 예제에서 사용할 구성 클래스를 보여 준다.

 

코드 3-1 자동 구성된 보안을 오버라이드하는 명시적 구성

package readinglist;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.
        AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.
        WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
 
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Autowired
    private ReaderRepository readerRepository;
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers(”/”).access(“hasRole(‘READER’)”) // READER 권한 필요
                .antMatchers(”/”).permitAll()

            .and()
 
            .formLogin()
                .loginPage(”/login”) // 로그인 폼 경로 설정
                .failureUrl(”/login?error=true”);
    }
 
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(new UserDetailsService() { // 사용자 정의 UserDetailService
            @Override
            public UserDetails loadUserByUsername(String username)
                    throws UsernameNotFoundException {
                return readerRepository.findOne(username);
            }
        });
    }
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.