새소식

SpringBoot

🐸Spring Boot스프링부트 Interceptor인터셉터 적용법 (feat.실 사례)

  • -

 

또 잊어버릴까 봐 남기는 인터셉터 사용법!

참고로 적는 경로는 파일의 경로가 아니라 URL 경로를 뜻한다.

 

1. 인터셉터 처리

인터셉터는 HandlerInterceptor 인터페이스를 통해 구현할 수 있다. 아래처럼 적어주면 된다.

따로 package를 만들어서 interceptor만 관리하고 있다. 

 

 

아래 코드 를 보면, 처리해 줄 경로가 많아서 따로 메서드처리 해두었다. 이해는 금방 갈 거라 믿고! 

유효하지 않은 경로나 사용자는 sendRedirect를 통해 메시지 컨트롤러로 넘겨주었다. 이후 해당 컨트롤러에서 알림을 주어 사용자가 알 수 있도록!

package com.biz.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import com.biz.dto.CompanyVO;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class AuthorizationInterceptor2 implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	CompanyVO member = (CompanyVO) request.getSession().getAttribute("memberInfo");
        String requestURI = request.getRequestURI();

        // 회원이 아닐 경우, 접근 불가
        if (member == null) {
        	if(isAllowedPath(requestURI)) {
        		return true;
        	}
        	else {
        		response.sendRedirect("/msg/loginNeeded");
        		return false;
        	}
        }

        // 관리자인 경우, 모든 경로 허용
        if (member.getUserLevel() == 0) {
            return true;
        }

        // 관리자가 아닌 경우, 특정 경로만 허용
        if (isAllowedPath(requestURI)) {
            return true;
        }
        else {
        	response.sendRedirect("/msg/authNeeded");
            return false;
        }
    }

    // 특정 경로 허용 여부를 판단하는 메소드
    private boolean isAllowedPath(String requestURI) {
        return requestURI.startsWith("/error") ||
        		
        		// 프로필 상세 정보 확인 및 수정가능
        		requestURI.startsWith("/personnel/personnelMyDetail") ||
        		requestURI.startsWith("/personnel/personnelUpdate") ||

        		// 중략 ...
    			requestURI.startsWith("/repair");
        		
    }
}

 

 

 

 

 

2. 빈 Bean 등록

 

그 다음으로 사용가능 하도록 구현한 인터셉터 클래스를 빈에 등록해야 한다. 이번엔 WebMvcConfigurer 인터페이스의 도움을 받아 구현할 수 있다! 아래처럼 registry에 인터셉터 클래스를 생성해 준다!

 

여기서 addPathPatterns("/")이라고 적어준다면, 모든 경로에 Interceptor를 적용시킨다는 의미고,

만약 특정 경로를 제외하고 싶다면 excludePathPatterns에 적어주면 된다. 그럼 해당 경로에서는 interceptor의 영향을 받지 않는다.

 

package com.biz.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import com.biz.interceptor.AuthorizationInterceptor2;

@Configuration
public class WebMvcConfigurer implements org.springframework.web.servlet.config.annotation.WebMvcConfigurer {
	
	@Override
    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(new AuthorizationInterceptor())
//                .addPathPatterns("/**"); // 모든 경로에 Interceptor 적용
		
		registry.addInterceptor(new AuthorizationInterceptor2())
			.addPathPatterns("/**")
			.excludePathPatterns("/", "/index",
					"/msg/**", "/assets/**", "/personnel/login", "/personnel/logout");
		
	}
	
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.