Spring Security Configuration 수정

jonghyukLee·2022년 8월 17일
0

WebsecurityConfigurerAdapterdeprecated 됨에 따라 SecurityConfig 클래스를 수정해 보았다.

기존 코드

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{

    private static final String [] staticResources = {
            "/css/**",
            "/js/**",
            "/img/**",
            "/favicon.ico",
            "/vendor/**",
    };

    @Override
    public void configure(WebSecurity web) throws Exception
    {
        web.ignoring().antMatchers(staticResources);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                //이하 생략
    }

수정한 코드

@Configuration
@EnableWebSecurity
public class SecurityConfig {

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

        http.cors()
            .and()
            .csrf().disable()
            .httpBasic().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        // 중간 생략

        return http.build();
    }

@Order(0)
@Bean
    public SecurityFilterChain resources(HttpSecurity http) throws Exception {
        //example
        http.requestMatchers(matchers -> matchers.antMatchers("/resource/**"))
                .authorizeHttpRequests(authorize -> authorize.anyRequest().permitAll())
                .requestCache().disable()
                .securityContext().disable()
                .sessionManagement().disable();
        return http.build();
    }

변경 사항

WebSecurityConfigurerAdapter 상속 제거

WebSecurityConfigurerAdapter 의 상속을 제거했기 때문에, cofigure() 함수를 override하여 작성하는 대신, HttpSecurity 를 주입받은 SecurityFilterChain 을 직접 Bean 객체로 등록해 주었다.
방식만 다를 뿐 내부 코드는 이전과 거의 유사하므로 생략 하였다.

web.ignoring() 제거

정적 리소스 파일 등에 대해 Security 권한 검증을 생략하기 위한 방식으로 web.ignoring()에 해당 되는 리소스 path들을 기입해왔었다.
하지만, 위 방식을 사용하게 되면 권한 뿐만아니라 Spring Security에서 기본적으로 제공하는 보안 헤더와 같은 다른 보안정책들 까지 무시하게 되기 때문에, 권장되지 않는다고 한다.
따라서 리소스에 대한 SecurityFilterChain 을 별도로 구성하여 기존 필터 이전에 걸러낼 수 있도록 변경했다.
이렇게 하면, 리소스 요청에 대해 Security의 보호를 받으면서, 불필요한 인가 처리는 생략할 수 있는 이점을 가져갈 수 있다.

참고

https://github.com/spring-projects/spring-security/issues/10938

profile
머무르지 않기!

0개의 댓글