Spring
부트캠프86일차 (interceptor)
동곤일상
2025. 6. 13. 16:16
반응형
1) Interceptor
설명 :
용도
- 인증/인가 처리
- 요청 로깅
- 공통 헤더 설정
- 예외 처리
장점
- 코드 재사용성 증가
- 컨트롤러와 분리된 공통 로직 관리
- 유연한 요청/응답 처리
인터셉터는 AOP와 유사하지만, HTTP 요청/응답에 특화된 스프링 MVC 전용 기능입니다.
MvcConfig 파일의 일부
(addInterceptors 메서드를 오버라이딩해 interceptor에 따른 행동을시킴)
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new BoardInterceptor())
.addPathPatterns("/board/write")
.addPathPatterns("/board/update")
.addPathPatterns("/board/delete");
//해당경로에접근하면 controller접근 전에
//BoardInterceptor검증을 통과해야함
}
interceptor/BoardInterceptor
(
preHandle: 컨트롤러 호출 전에 실행. 요청을 가로채서 처리 가능(예: 인증 체크).
)
package kr.gdu.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import kr.gdu.exception.ShopException;
import kr.gdu.logic.User;
public class BoardInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String boardid = request.getParameter("boardid");
HttpSession session = request.getSession();
User login = (User)session.getAttribute("loginUser");
if(boardid==null || boardid.equals("1")) {
//공지사항(boardid=='1')은 관리자만 쓸수있음!!!
if(login==null) {
String msg = "로그인부터하세요";
String url = request.getContextPath()+"/user/login";
throw new ShopException(msg, url);
}
else if(!login.getUserid().equals("admin")) {
String msg = "관리자만 등록가능";
String url = request.getContextPath()+"/board/list?boardid=1";
throw new ShopException(msg, url);
}
}
//로그인을안하면 자유게시판도 쓸수없게막아야함
else if(boardid.equals("2")) {
if(login==null) {
String msg = "로그인부터하세요";
String url = request.getContextPath()+"/user/login";
throw new ShopException(msg, url);
}
}
return true; //BoardCotroller 정상실행
}
}
해당 인터셉터는 boardid='1' or null (공지사항)일 때
관리자(admin)가 아닐 시 모두 예외가발생되게끔 로직 설정
또한 boardid=''2"일때는 로그인확인만 진행