[스프링] 스프링 시큐리티를 활용한 IP 필터링

이번 포스트에서는 스프링 시큐리티를 사용하여 IP 필터링을 구현하는 방법에 대해 알아보겠습니다.

스프링 시큐리티

스프링 시큐리티는 스프링 기반 애플리케이션의 보안을 담당하는 프레임워크로, 다양한 인증, 권한 부여, 공격 방어 등의 보안 기능을 제공합니다.

IP 필터링 구현

1. IP 주소 확인

먼저, 클라이언트의 IP 주소를 확인해야 합니다. 이를 위해 HttpServletRequest 객체를 사용하여 클라이언트의 IP 주소를 가져올 수 있습니다.

String clientIp = request.getRemoteAddr();

2. IP 필터링

다음으로, IP 주소를 필터링하여 접근을 제어할 수 있습니다. 스프링 시큐리티를 사용하면 WebSecurityConfigurerAdapter를 확장하여 커스텀한 SecurityConfigurer를 구현할 수 있습니다.

@EnableWebSecurity
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .addFilterBefore(new IpFilter(), BasicAuthenticationFilter.class);
    }
}

3. 커스텀한 IP 필터 구현

이제, 커스텀한 IP 필터를 구현할 차례입니다. OncePerRequestFilter를 상속받아 구현할 수 있습니다.

public class IpFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String clientIp = request.getRemoteAddr();
        // IP 주소 필터링 로직 구현
        if (/* 허용되는 IP 주소인 경우 */) {
            filterChain.doFilter(request, response);
        } else {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        }
    }
}

위의 예시에서는 클라이언트의 IP 주소를 확인하고, 특정 조건에 따라 접근을 허용하거나 거부하고 있습니다.

스프링 시큐리티를 사용하여 IP 필터링을 구현하는 방법에 대해 간단히 살펴보았습니다. 보다 복잡한 로직을 추가하여 원하는 보안 정책을 구현할 수 있습니다.

참고 자료