[Spring] 인터셉터

이다혜·2023년 11월 23일
0

Spring

목록 보기
17/27
post-thumbnail

📌 Spring 인터셉터(Interceptor)?


Spring MVC에서 컨트롤러로 요청이 들어가기 전에 해당 요청을 가로채고 처리할 수 있는 기능을 제공하는 클래스

📌 admin 권한이 필요한 페이지 권한 확인하기


📍 인터셉터가 없다면?

admin권한이 필요한 모든 컨트롤러에서 다음과 같은 코드를 반복해야한다.

if(!rq.isAdmin()) {
	throw new RuntimeException("관리자만 접근할 수 있습니다.");

📍 인터셉터 사용

NeedToAdminInterceptor.java

package com.ll.sb.global.interceptor;

@Component
@RequiredArgsConstructor
public class NeedToAdminInterceptor implements HandlerInterceptor {

    private final Rq rq;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        if (!rq.isLogined()) {
            throw new RuntimeException("로그인 후 이용해주세요.");
        }

        if (!rq.isAdmin()) {
            throw new RuntimeException("관리자만 이용할 수 있는 페이지 입니다.");
        }
        return true;
    }

}
  • NeedToAdminInterceptor는 @Component가 달려 있으므로 자동으로 감지되어 빈으로 등록된다.
  • preHandle 메서드는 컨트롤러의 핸들러 메서드가 실행되기 전에 실행되어 로그인 여부와 관리자 권한을 확인한다.

WebMvcConfig.java

package com.ll.sb.global.webMvc;

@Configuration
@RequiredArgsConstructor
public class WebMvcConfig implements WebMvcConfigurer {

    private final NeedToAdminInterceptor needToAdminInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(needToAdminInterceptor)
                .addPathPatterns("/adm/**");
    }
}
  • WebMvcConfigurer 인터페이스는 Spring MVC 구성을 설정하기 위한 메서드를 제공한다.
    이를 구현하는 클래스가 @Configuration으로 주석이 달린 경우 Spring MVC에 사용자 정의 구성을 제공할 수 있다.
  • addInterceptors 메서드를 통해 NeedToAdminInterceptor를 "/adm/" 경로에 등록하고 있다.
    이렇게 하면 "/adm/"로 시작하는 모든 URL에 대해 해당 인터셉터가 동작하게 된다.

0개의 댓글