본문 바로가기
🪲 bugs

SpringSecurity: SecurityFilterChain 설정

by iirin 2023. 9. 11.

WebSecurityConfigurerAdapter 가 있었는데요?

발생 상황

SpringSecurity 5.7.0부터 Deprecated 된 WebSecurityConfigurerAdapter 가 6.0부터는 아예 사용할 수 없게 되었습니다. 사용자가 컴포넌트 기반 보안 구성을 할 수 있도록 권장하기 위해서라고 합니다.

In Spring Security 5.7.0-M2 we deprecated the WebSecurityConfigurerAdapter, as we encourage users to move towards a component-based security configuration.
To assist with the transition to this new style of configuration, we have compiled a list of common use-cases and the suggested alternatives going forward.

사실 SpringSecurity를 사용해본적이 없어서 이전에 팀메이트가 사용한 코드를 많이 참고하려고했는데...

이번에 자바 17, 스프링부트 3.0 버전을 테스트 해보려고 새로이 프로젝트를 구성한게 이렇게 부메랑으로 돌아올 지 몰랐습니다 🥲 덕분에 보안 설정 방법을 새롭게 공부할 수 있게 되었습니다.

 

 

Http Security 설정 방법

  • 이전 방법
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
	@Override
    protected void configure(HttpSecurity http) throws Exception {
    	http 
        	.authorizeHttpRequests((authz) -> authz .anyRequest().authenticated())
        					.httpBasic(withDefaults());
    }
}
  • SecurityFilterChain을 이용한 방법

- `SecurityFilterchain` 을 사용한 방법
```java
@Configuration
public class SecurityConfiguration {

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

}

 

WebSecurity 설정 방법

  • 보통 WebSecurity에서 ignoring()을 사용하면 Spring Security 가 생략되므로 주의합니다.
    • security filter를 무시하고 보안 기능도 무시됩니다.
    • WebSecurity가 HttpSecurity 위에 기반하고 있기 때문입니다.
  • 이전 방법
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
	@Override
    public void configure(WebSecurity web) {
    	web.ignoring().antMatchers("/ignore1", "/ignore2");
    }
}
  • WebSecurityCustomizer 를 사용한 방법

- `WebSecurityCustomizer` (Spring Security 5.4부터 사용 가능)
```java
@Configuration
public class SecurityConfiguration {

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

}

Refs.