토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

번역을 완료하지 않은 문서입니다. 언제든지 내용을 수정할 수 있습니다.

스프링 시큐리티 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.

목차:


스프링 시큐리티 코틀린 설정은 스프링 스큐리티 5.3부터 지원했다. 네이티브 코틀린 DSL로 손쉽게 스프링 시큐리티 설정을 만들 수 있다.


스프링 시큐리티는 코틀린 설정을 사용하는 많은 샘플 어플리케이션을 제공한다.


17.1. HttpSecurity

스프링 시큐리티는 모든 사용자를 인증해야 한다는 걸 어떻게 알 수 있을까? 폼 기반 인증을 지원해야 한다는 것은 또 어떻게 알까? 사실은 뒷단에서 실행하는 WebSecurityConfigurerAdapter라는 설정 클래스가 있다. 이 클래스는 디폴트로 아래와 같이 구현돼 있는 configure라는 메소드가 있다:

fun configure(http: HttpSecurity) {
   http {
        authorizeRequests {
            authorize(anyRequest, authenticated)
        }
       formLogin { }
       httpBasic { }
    }
}

이 디폴트 설정은:

이 설정은 XML 네임스페이스 설정과도 매우 유사하다는 것을 알 수 있다:

<http>
    <intercept-url pattern="/**" access="authenticated"/>
    <form-login />
    <http-basic />
</http>

17.2. Multiple HttpSecurity

<http> 블록을 여러 개 만들 수 있듯이, HttpSecurity 인스턴스도 여러 개 설정할 수 있다. 핵심은 WebSecurityConfigurerAdapter를 여러 번 상속하는 것이다. 예를 들어 다음 예제에선 /api/로 시작하는 URL은 다른 설정을 사용한다:

@EnableWebSecurity
class MultiHttpSecurityConfig {
    @Bean                                                           // (1)
    public fun userDetailsService(): UserDetailsService {
        val users: User.UserBuilder = User.withDefaultPasswordEncoder()
        val manager = InMemoryUserDetailsManager()
        manager.createUser(users.username("user").password("password").roles("USER").build())
        manager.createUser(users.username("admin").password("password").roles("USER","ADMIN").build())
        return manager
    }

    @Configuration
    @Order(1)                                                        // (2)
    class ApiWebSecurityConfigurationAdapter: WebSecurityConfigurerAdapter() {
        override fun configure(http: HttpSecurity) {
            http {
                securityMatcher("/api/**")                           // (3)
                authorizeRequests {
                    authorize(anyRequest, hasRole("ADMIN"))
                }
                httpBasic { }
            }
        }
    }

    @Configuration                                                   // (4)
    class FormLoginWebSecurityConfigurerAdapter: WebSecurityConfigurerAdapter() {
        override fun configure(http: HttpSecurity) {
            http {
                authorizeRequests {
                    authorize(anyRequest, authenticated)
                }
                formLogin { }
            }
        }
    }
}

(1) 평소처럼 인증을 설정한다.
(2) WebSecurityConfigurerAdapter 인스턴스를 생성하고, @Order를 명시해서 가장 우선시할 WebSecurityConfigurerAdapter로 설정한다.
(3) http.antMatcher는 이 HttpSecurity/api/로 시작하는 URL에만 적용한다고 말하고 있다.
(4) 다른 WebSecurityConfigurerAdapter 인스턴스를 생성한다. /api/로 시작하지 않는 URL은 이 설정을 사용한다. 이 설정은 1보다 큰 @Order 값을 가지므로 ApiWebSecurityConfigurationAdapter 이후에 사용한다 (기본적으로 @Order를 생략하면 마지막이 된다).


전체 목차는 여기에 있습니다.

<< >>