안녕하세요 오늘은 interceptor로 특정 ip로 접속시 에러페이지로 이동시키는 로직을 구현해보도록 하겠습니다
컨트롤러(Controller)의 '핸들러(Handler)'를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할수 있는 일종의 필터입니다
주로 로그인 체크와 권한 체크를 하기위해 사용합니다
스프링에서 제공하는 org.springframework.web.servlet.HandlerInterceptor 인터페이스를 구현하거나,
org.springframework.web.servlet.handler.HandlerInterceptorAdapter 추상클래스를 오버라이딩 함으로써
자신만의 인터셉터를 만들수 있습니다.
1) preHandle()
2) postHandle()
3) afterCompletion()
package com.example.sessionEx.intercept;
import com.example.sessionEx.service.MainService;
import com.example.sessionEx.util.SessionUtil;
import com.example.sessionEx.vo.IpBanVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import java.net.InetAddress;
import java.util.List;
@RequiredArgsConstructor
public class MainInterceptor implements HandlerInterceptor {
private final MainService mainService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
InetAddress ia = InetAddress.getLocalHost();
boolean a = mainService.getIpBanList()
.stream()
.anyMatch(ip -> ip.getIp().equals(ia.getHostAddress()));
if(a == true){
response.sendRedirect(request.getContextPath()+"/error");
return false;
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private MainService mainService;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MainInterceptor(mainService)).excludePathPatterns("/error");
}
}
로직 구현 후 실행결과 금지된 ip로 접근하였을 경우 에러페이지로 이동하는것을 확인하였습니다 다음에는 더 재미있는 소재로 찾아뵙겠습니다 감사합니다.