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

스프링 부트 공식 레퍼런스를 한글로 번역한 문서입니다.

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

목차


12.13. Security

이번 섹션에선 스프링 부트와 함께 스프링 시큐리티를 사용할 때 묻는 질문들을 포함해서, 스프링 부트와 보안과 관련있는 질문들을 다룬다.

스프링 시큐리티를 자세히 알아보려면 스프링 시큐리티 프로젝트 페이지를 방문해봐라.

12.13.1. Switch off the Spring Boot Security Configuration

애플리케이션에 WebSecurityConfigurerAdapterSecurityFilterChain 빈을 가지고 있는 @Configuration을 정의하면 스프링 부트의 디폴트 웹 애플리케이션 시큐리티 설정이 꺼진다.

12.13.2. Change the UserDetailsService and Add User Accounts

AuthenticationManagerAuthenticationProvider, UserDetailsService 타입 @Bean을 제공하면, InMemoryUserDetailsManager를 위한 디폴트 @Bean이 생성되지 않는다. 따라서 스프링 시큐리티에 있는 모든 기능 셋을 (다양한 인증 옵션같은) 사용할 수 있다.

사용자 계정을 추가하는 가장 쉬운 방법은 자체 UserDetailsService 빈을 제공하는 거다.

12.13.3. Enable HTTPS When Running behind a Proxy Server

주요 엔드포인트를 전부 HTTPS를 통해서만 접근할 수 있도록 하는 건 어떤 애플리케이션에서든 중요한 일이다. 서블릿 컨테이너로 톰캣을 사용하는 경우, 스프링 부트는 몇 가지 environment 세팅을 감지하면 톰캣의 자체 RemoteIpValve를 자동으로 추가하며, HttpServletRequest에서 신뢰할 수 있는 요청인지 아닌지 판단해줄 거다 (실제 SSL 종료 처리를 하는 프록시 서버가 앞에 있을 때에도). 관례적인 이름을 따르는 요청 헤더(x-forwarded-for, x-forwarded-proto)가 있는지에 따라 결정하는 표준 동작이기 때문에, 대부분의 프론트 엔드 프록시에서 동작할 거다. 다음 예제처럼 application.properties에 몇 가지 항목을 추가하면 이 밸브를 켤 수 있다:

properties yaml
server.tomcat.remoteip.remote-ip-header=x-forwarded-for
server.tomcat.remoteip.protocol-header=x-forwarded-proto
server:
  tomcat:
    remoteip:
      remote-ip-header: "x-forwarded-for"
      protocol-header: "x-forwarded-proto"

(이 프로퍼티 중 하나만 있어도 밸브를 켠다. 아니면 WebServerFactoryCustomizer 빈을 사용해 TomcatServletWebServerFactory를 커스텀하면서 RemoteIpValve를 추가해도 된다.)

스프링 시큐리티에서 모든 (또는 일부) 요청에 시큐어 채널을 요구하도록 설정하려면, 자체 SecurityFilterChain 빈을 추가해 아래 HttpSecurity 설정을 넣는 것을 고려해봐라:

@Configuration
public class MySecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        // Customize the application security ...
        http.requiresChannel().anyRequest().requiresSecure();
        return http.build();
    }

}

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

<< >>

TOP