킹의 개발일지

Spring Security without the WebSecurityConfigurerAdapter 본문

Spring

Spring Security without the WebSecurityConfigurerAdapter

k1ng 2022. 6. 15. 13:55

스프링 이니셜라이저를 사용해 최신버전의 종속을 집어넣고 개인 프로젝트를 하다가, 스프링 시큐리티 구성파일을 작업하던중 WebSecurityConfigurerAdapter 사용에 밑줄이 그어진것을 발견했다.

 

뭔가 싶어서 찾아보니 스프링 시큐리티 5.7.0-MZ에서 WebSecurityConfigurerAdapter가 deprecated 됐다고 한다.

 

스프링은 component-based security configuration 을 사용하는 방식을 독려한다고 한다.

 

때문에 스프링 블로그를 참조해 몇가지 사용 케이스들을 보면서 공부하고자 한다.

 

Configuring HttpSecurity

WebSecurityConfigurerAdapter deprecated 되기 전에 모든 엔드포인트에 접근을 보안처리 하고자 했다면 다음과 같이 했을 것이다.

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
    }

}

 

그러나 스프링은 이제부터 SecurityFilterChain 빈을 등록하는 방식을 추천한다고 한다.

@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
        return http.build();
    }

}

 

Configuring WebSecurity

스프링 시큐리티 5.4에서 WebSecurityCustomizer를 소개했다.

 

WebSecurityCustomizer는 WebSecurity를 커스텀하기위해 사용돼는 콜백 인터페이스다.

 

css, js, image 같은 정적파일들에 접근할 때 보안을 무시하도록 작업 하고자 했을 때 WebSecurityConfigurerAdapter를 상속받고 WebSecurity 타입의 파라미터를 갖는 configure메서드를 오버라이딩 했어야했다.

 

아래 예시는 WebSecurityConfigurerAdapter를 사용해 "/ignore1", "/ignore2" 요청에대해 필터를 적용하지 않는 예시다.

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers("/ignore1", "/ignore2");
    }

}

 

그리고 아래는 WebSecurityCustomizer 빈을 등록해 작업하는 방식이다.

@Configuration
public class SecurityConfiguration {

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");
    }

}

 

이외에도 WebSecurityConfigurerAdapter 를 사용하던 방식을 벗어난 시큐리티 사용법에 대한 사용 케이스들이 스프링 블로그에 많이 올라와있다.

 

다른 케이스들이 필요하다면 스프링 블로그를 방문해 더 찾아보도록 하자.

 

https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

'Spring' 카테고리의 다른 글

@SpringBootApplication  (0) 2022.06.18