[Spring] WebSecurity ignoring Security filter chain 적용되는 문제

hyng·2022년 1월 5일
2

문제 상황

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    private final JwtAuthenticationFilter jwtAuthenticationFilter;

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("logout","/refreshToken","/js/**","/css/**","/error");
    }

 @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.
                csrf().disable()
                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler())
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/login", "/join","/logout")
                .permitAll()
                .antMatchers(HttpMethod.POST, "/signup")
                .permitAll()
                .anyRequest().authenticated()
                .and()
                .logout()
                    .addLogoutHandler(customLogoutHandler)
                .and()
                .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);

    }

 


}

위처럼 web.ignoring().antMatchers(...) 을 사용하면 security filter chain을 거치지 않는다고 알고 있었다.

그런데 /refreshToken으로 접근할 경우 내가 만들어놓은 security filter를 제외하지 않는 문제가 발생했다.

해결

찾아본 결과, 내가 만든 custom filter를 bean으로 등록한 게 문제였다.

web.ignoring().antMatchers(...)는 파라미터로 전달하는 패턴에 대해 security filter chain을 생략하도록 하는데, custom filter를 빈으로 등록하게 되면 해당 필터가 security filter chain에 포함되는 게 아니라 default filter chain에 포함되게 되기 때문에 해당 패턴에 접근하게 됐을 때 그대로 필터를 적용하게 되는 것이다.

필터를 빈으로 등록해 주던 것을 아래처럼 바꿔주면 된다.

.addFilterBefore(new JwtAuthenticationFilter(refreshTokenService,jwtTokenProvider), UsernamePasswordAuthenticationFilter.class);

참고

https://stackoverflow.com/questions/39152803/spring-websecurity-ignoring-doesnt-ignore-custom-filter/40969780#40969780

profile
공부하고 알게 된 내용을 기록하는 블로그

1개의 댓글

comment-user-thumbnail
2023년 6월 18일

정말 감사합니다. 4시간 동안 헤맸는데 덕분에 해결됐습니다.
시간 벌어주셔서 정말 감사합니다 🤣🤣

답글 달기