본문 바로가기
IT

Interceptor 설정 후 정적 자원 접근 제한 해제하기 - Interceptor, 자원 접근

by 카카오망고 2025. 5. 17.
반응형

목차

웹 개발시 사용자 인증 및 권한 관리는 매우 중요한 요소입니다. 특정 페이지에 대해 권한이 없는 사용자의 접근을 제한해야 할 필요가 있습니다. 이를 위해 Spring에서는 Interceptor를 활용하여 간편하게 접근 제한 로직을 구현할 수 있습니다. 본 글에서는 Interceptor 설정 후 정적 자원에 대한 접근 제한을 해제하는 방법을 다루어 보겠습니다. 이 과정에서 Interceptor의 기본 개념과 활용 방법을 이해하고, 정적 자원 접근 제한을 해제하는 방법에 대해 구체적으로 살펴보겠습니다.

 

Interceptor는 요청 처리 전후에 특정 작업을 수행할 수 있는 기능을 제공합니다. Filter와 유사하지만, Filter가 Spring Context에 접근할 수 없는 반면 Interceptor는 Spring Bean에 접근할 수 있습니다. 따라서 Interceptor를 사용하면 요청 처리 전후에 애플리케이션의 상태를 쉽게 관리할 수 있습니다. 예를 들어, 로그인 여부에 따라 접근 가능한 URL을 제한하는 데 Interceptor를 활용할 수 있습니다. 이처럼 Interceptor를 이용하면 코드의 가독성과 유지보수성을 높일 수 있습니다.

👉Interceptor 설정 후 정적 자원 접근 제한 해제하기 알아보기

Interceptor의 이해

Interceptor는 Spring MVC에서 제공하는 기능으로, HTTP 요청이 들어오고 나가는 시점에서 특정 작업을 처리할 수 있습니다. 이를 통해 요청의 인증 및 권한 관리, 로깅, 트랜잭션 관리 등을 수행할 수 있습니다. Interceptor는 HandlerInterceptor 인터페이스를 구현하여 사용할 수 있으며, 주요 메소드로는 preHandle, postHandle, afterCompletion이 있습니다. 각각의 메소드는 요청 처리 전, 후, 완료 후의 작업을 관리합니다.

 

우선 preHandle 메소드는 요청이 Controller에 도달하기 전에 호출되며, 이곳에서 요청의 유효성을 검사할 수 있습니다. postHandle 메소드는 Controller의 요청 처리 후 뷰를 렌더링하기 전에 호출되므로, 데이터 가공이나 추가 작업을 수행하기에 적합합니다. 마지막으로 afterCompletion 메소드는 요청 처리가 완료된 후 호출되며, 리소스 정리나 로그 기록에 사용됩니다.

정적 자원 접근 제한 설정

정적 자원에 대한 접근 제한은 일반적으로 보안상의 이유로 필요합니다. 예를 들어, 특정한 파일이나 이미지에 대해 인증된 사용자만 접근할 수 있도록 제한할 수 있으나, 모든 정적 자원에 대해 이러한 제한을 두는 것은 개발과 운영에 불편함을 초래할 수 있습니다. 따라서, 로그인하지 않은 사용자에 대해서도 접근이 허용되어야 하는 특정 정적 자원에 대해서는 예외 처리가 필요합니다.

 

정적 자원에 대한 접근을 제한하는 과정은 Interceptor의 preHandle 메소드를 통해 이루어집니다. 이 메소드에서 요청 URI를 확인하고, 특정 패턴에 해당하는 정적 자원에 대해서는 접근을 허용하도록 설정할 수 있습니다. 이를 통해 보안과 편의성을 동시에 만족할 수 있습니다.

Interceptor 구현하기

Interceptor를 구현하기 위해서는 HandlerInterceptor 인터페이스를 구현하는 클래스를 생성해야 합니다. 이 클래스에서는 preHandle 메소드를 오버라이드하여 요청의 URI를 확인하고, 로그인 상태에 따라 적절한 로직을 처리해야 합니다. 예를 들어, 사용자가 로그인하지 않은 상태에서 특정 URL 패턴으로 접근할 경우 로그인 페이지로 리다이렉트하는 로직을 추가할 수 있습니다.

 

코드 예시는 다음과 같습니다. 사용자의 요청 URI를 가져와, 해당 URI가 정적 자원인지 확인한 후, 로그인 상태에 따라 리다이렉트를 처리합니다. 이를 통해 정적 자원은 자유롭게 접근할 수 있도록 하면서도 보안을 강화할 수 있습니다.

👉Interceptor 설정 후 정적 자원 접근 제한 해제하기 바로보기

Configuration에 Interceptor 등록하기

Interceptor를 구현한 후에는 해당 Interceptor를 Spring의 Configuration에 등록해야 합니다. 이를 위해 WebMvcConfigurer를 구현하는 Configuration 클래스를 생성합니다. 이 클래스에서 addInterceptors 메소드를 오버라이드하여 구현한 Interceptor를 등록합니다. 이때 addPathPatterns 메소드를 사용하여 특정 URL 패턴에 대한 Interceptor 적용을 설정할 수 있습니다.

 

예를 들어, 메모 기능과 관련된 URL 패턴은 포함하고, 정적 자원에 해당하는 URL 패턴은 제외하는 방식으로 설정합니다. 이를 통해 접근 관리와 정적 자원 처리를 효과적으로 수행할 수 있습니다.

정적 자원 접근 테스트하기

Interceptor 설정이 완료되면 실제로 정적 자원에 대한 접근 테스트를 진행해야 합니다. 사용자가 로그인하지 않은 상태에서 정적 자원에 접근을 시도하면 차단되거나 허용되는지를 확인합니다. 이 과정에서 브라우저의 개발자 도구를 활용하여 요청과 응답 헤더를 확인할 수 있습니다.

 

또한, 로그인한 상태에서 특정 URL에 접근하려고 할 때 리다이렉트가 정상적으로 이루어지는지도 확인해야 합니다. 이처럼 실제 테스트를 통해 설정한 Interceptor의 동작을 검증하고, 필요한 경우 수정이 이루어져야 합니다.

결론 및 요약

Interceptor를 활용하여 정적 자원에 대한 접근 제한을 해제하는 방법에 대해 살펴보았습니다. Interceptor는 Spring에서 제공하는 유용한 기능으로, 요청 처리 전후에 작업을 수행할 수 있습니다. 정적 자원에 대한 접근을 제한하되, 특정 자원은 예외적으로 허용하는 방식으로 보안과 편의성을 동시에 고려할 수 있습니다.

 

이제 Interceptor를 구현하고 적용하는 방법을 익혔으니, 실제 프로젝트에도 유용하게 활용해 보시길 바랍니다. 이러한 접근 방법을 통해 웹 애플리케이션의 보안을 강화하고, 사용자 경험을 개선할 수 있습니다.

FAQ

Interceptor와 Filter의 차이는 무엇인가요?

Interceptor는 Spring MVC의 기능으로, Spring Bean에 접근할 수 있습니다. 반면, Filter는 Servlet 스펙에 따른 것으로 Spring Context와는 독립적이며, Spring Bean에 접근할 수 없습니다.

정적 자원 접근 제한을 해제할 때 주의할 점은 무엇인가요?

정적 자원 접근 제한을 해제할 때는 보안성을 고려해야 합니다. 예를 들어, 민감한 정보가 포함된 정적 자원은 반드시 접근 제한이 필요합니다. 정적 자원에 대한 예외 처리를 잘 설정하여 보안과 편의성을 모두 만족시키는 것이 중요합니다.

여러 개의 Interceptor를 사용할 수 있나요?

네, 여러 개의 Interceptor를 사용할 수 있습니다. 이 경우 각각의 Interceptor는 요청 처리 전후에 순차적으로 작동하게 됩니다. 각 Interceptor의 순서는 등록 순서에 따라 결정되며, 이를 통해 다양한 기능을 조합하여 사용할 수 있습니다.

👉Interceptor 설정 후 정적 자원 접근 제한 해제하기 바로보기
반응형