일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- jenkins window
- spring boot
- 알림톡
- DynamoDB
- QureyDsl
- springboot
- docker app
- 카카오 알림톡
- jdk upgrade
- AWS
- querydsl
- thymeleaf
- modelmapper
- NoSQL Workbench
- push 403
- Telegram API
- 윈도우 개발서버
- growpart
- EC2
- 고정 아이피
- jenkins bitbucket
- 비즈뿌리오
- 개발서버
- docker
- telegram
- NoArgsConstructor
- rbenv
- Kotlin
- docker node
- layout-dialect
Archives
- Today
- Total
givepro
Interceptor를 활용한 접속자 정보 저장 본문
반응형
Interceptor란?
Interceptor란 컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로채는 역할을 합니다.인터셉터는 관리자만 접근할 수 있는 관리자 페이지에 접근하기 전에 관리자 인증을 하는 용도로 활용될 수 있습니다.
Filter와 Interceptor의 차이
- 호출 시점
Filter는 DispatcherServlet이 실행되기 전 , Interceptor는 DispatcherServlet이 실행된 후 - 설정 위치
Filter는 web.xml , Interceptor는 spring-servlet.xml - 구현 방식
Filter는 web.xml에서 설정을 하면 구현이 가능하지만, Interceptor는 설정은 물론 메서드 구현이 필요합니다.
Interceptor 생성
@Component
public class AdminLogInterceptor extends HandlerInterceptorAdapter {
private AdminLogService adminLogService;
@Autowired
public AdminLogInterceptor(AdminLogService adminLogService) {
this.adminLogService = adminLogService;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
adminLogBuildAndInsertLog(request, response);
super.afterCompletion(request, response, handler, ex);
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
private void adminLogBuildAndInsertLog(HttpServletRequest request, HttpServletResponse response) {
AdminLog adminLog = AdminLog.builder()
.ip(getIpAddress(request))
.uri(request.getRequestURI())
.status(String.valueOf(response.getStatus()))
.build();
adminLogService.insertAdminLog(adminLog);
}
private String getIpAddress(HttpServletRequest request) {
String ipAddress = request.getHeader("X-Forwarded-For");
if (ipAddress == null) ipAddress = request.getRemoteAddr();
return ipAddress;
}
}
HandlerInterceptorAdapter를 상속하면 여러 메서드를 오버라이딩 가능
- preHandle : Request가 들어오고 Controller에 넘어가기 직전에 처리
- postHandle : Controller에서 요청이 다 마무리하고, View로 Rendering하게 전에 처리
- afterCompletion : Controller에서 요청이 다 마무리되고, View로 Rendering이 끝난후 처리
'백엔드 > SpringBoot' 카테고리의 다른 글
SpringBoot AWS SES (Simple Email Service) 연동 (2) (0) | 2022.10.25 |
---|---|
SpringBoot AWS SES (Simple Email Service) 연동 (1) (0) | 2022.10.25 |
QueryDsl - JPQLQuery 사용하기 (0) | 2022.10.25 |
Paypal 연동 (2) - REST API JAVA (Spring boot) (0) | 2021.11.03 |
Paypal 연동 (1) - REST API APP 및 계정 생성 (0) | 2021.11.03 |
Comments