본문 바로가기
Spring/Spring Security

스프링 시큐리티 설정 파일 내부 구성 ver.5.7 이후, WebConfigurerAdapter 사용 안됨 문제

by 다오__ 2024. 3. 8.

스프링 시큐리티는 5.4버전 이후  기존의 WebConfigurerAdapter를 상속받아 사용하지 않고 SecurityFilterChain Bean 방식으로 사용된다.

 

SecurityFilterChain

기존의 WebSecurityConfigurerAdapter를 사용한 구성 방식에 대한 대안으로 제공되며, Spring Security의 필터 체인을 구성하기 위한 메커니즘이다.

 

 public class WebSecurityConfig {
 @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

    http.build();
    }
}

 

내부에 들어가는 HttpSecurity객체는 HttpSecurity는 Spring Security에서 웹 기반 보안 구성을 위한 핵심 클래스이다.

 

HttpSecurity 주요 기능과 구성


인증과 인가

특정 경로에 대한 접근을 인증된 사용자에게만 허용하거나, 특정 권한을 가진 사용자에게만 접근을 제한할 수 있다.

 

예시)

  http
    .authorizeRequests()
    .antMatchers("/admin/**").hasRole("ADMIN")
    .anyRequest().authenticated();


로그인 및 로그아웃 처리

사용자 정의 로그인 페이지를 설정하고, 로그인 성공/실패 시의 핸들링, 로그아웃 구성을 할 수 있다.

    http
    .formLogin()
    .loginPage("/login")
    .successForwardUrl("/home")
    .failureUrl("/login?error=true")
    .and()
    .logout()
    .logoutSuccessUrl("/login?logout=true");


CSRF(Cross-Site Request Forgery) 보호 활성화/비활성화

웹 애플리케이션을 CSRF 공격으로부터 보호한다. 필요에 따라 비활성화할 수도 있다.

  http
    .csrf().disable();


CORS(Cross-Origin Resource Sharing) 설정

다른 도메인에서 현재 도메인으로의 요청을 허용하도록 CORS 정책을 설정할 수 있다.

  http
    .cors().configurationSource(corsConfigurationSource());


세션 관리

세션 고정 보호, 세션 생성 정책, 동시 세션 제어 등 세션 관리와 관련된 설정을 할 수 있다.

  http
    .sessionManagement()
    .sessionCreationPolicy(SessionCreationPolicy.STATELESS);


 
HTTPS 및 SSL/TLS 구성

특정 요청에 대해 HTTPS를 강제하거나, SSL/TLS를 통한 보안 통신을 구성할 수 있다.

  http
    .requiresChannel()
    .requestMatchers(r -> r.getHeader("X-Forwarded-Proto") != null)
    .requiresSecure();


예외 처리 및 접근 거부 처리

사용자 정의 접근 거부 페이지나 예외 처리 로직을 설정할 수 있다.

  http
    .exceptionHandling()
    .accessDeniedPage("/403");



WebSecurity 

 

보안 필터 체인의 전역 설정을 담당하며, 다음과 같은 여러 가지 구성을 제공할 수 있다. HttpSecurity보다 우선권이 높다.

 

스프링 시큐리티 필터 체인의 전역적인 속성을 구성하는 데 사용되며, 특히 보안 필터 체인에서 제외될 경로(즉, 스프링 시큐리티가 무시할 경로)를 지정하는 데 주로 사용된다.

 

이는 WebSecurityCustomizer 인터페이스의 customize()를 통해 사용 가능하다.

예시)

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return new WebSecurityCustomizer() {
            @Override
            public void customize(WebSecurity web) {
                web.ignoring().antMatchers("/except/**", "/webjars/**");
            }
        };
    }

 

WebSecurity 구성

  • ignoring(): 특정 경로 패턴에 대한 보안 필터 체인을 적용하지 않도록 설정 주로 정적 자원에 사용된다.
  • debug(boolean): 디버그 모드를 활성화하거나 비활성화한다. 디버그 모드가 활성화되면, 스프링 시큐리티 관련 디버그 정보가 로깅된다.
  • securityFilterChain(FilterChainProxy): 사용자 정의 FilterChainProxy를 WebSecurity에 등록할 수 있다.
  • setFilterChainProxySecurityConfigurer(FilterChainProxySecurityConfigurer): FilterChainProxy를 구성하는 데 사용되는 SecurityConfigurer를 설정할 수 있다.
  • servletApi(): HttpServletRequest의 메서드를 사용하여 SecurityContext에 접근할 수 있게 한다.
  • firewall(HttpFirewall): 사용자 정의 HttpFirewall을 설정할 수 있다. 이를 통해 요청 URL의 정규화 및 검증 로직을 커스터마이즈할 수 있다.