기존 [Spring]MVC_1. 기본설정 순서
[Spring]MVC_2. filter, aop
[Spring]MVC_3.로그인 에 이어서 진행한다.
Interceptor
- Interceptor란 컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로채는 역할
- DispatcherServlet과 Controller의 사이에 있다고 보자.
- 관리자만 접근할 수 있는 관리자 페이지에 접근하기 전에 관리자 인증을 하는 용도로 활용
- HandlerInterceptor를 상속받는다
▷ filter와의 차이점: filter는 같은 웹어플리케이션 내에서만 접근이 가능하지만, interceptor는 스프링내의 모든 객체에 접근이 가능하다.
출처: https://rongscodinghistory.tistory.com/2 [악덕고용주의 개발 일기]
▶︎ 개념 정리
- preHandle : DispatcherServlet에서 Controller로 보내주는 부분, 로그인 처리를 도와준다. 예를 들어 관리자만 관리자 페이지 접근
- postHandle: Controller에서 DispatcherServlet으로 보내주는 부분, 컨드롤러가 수행되고 화면에 보여지기 직전에 수행됨
- afterCompletion: View rendering 된 후, view가 실행된 후 처리
package com.mvc.upgrade.common.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor{
private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
// DS -> Controller : 로그인 처리르 도와줌, 예를 들어 관리자로그인에서만 가능한 부분들을 구현할때
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
logger.info("[INTERCEPTOR] preHandle");
if(request.getRequestURI().contains("/loginform.do") ||
request.getRequestURI().contains("/ajaxlogin.do") ||
request.getSession().getAttribute("login") != null
) {
return true;
}
// spring 3.2 이상부터는 servlet-context.xml에서 <exclude-mapping-path>를 통해 설명할 수 있다.
if(request.getSession().getAttribute("login") == null) {
response.sendRedirect("loginform.do");
}
return false;
}
// Controller -> DS : 컨트롤러가 수행되고 화면이 보여직전에 수행됨
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
logger.info("[INTERCEPTOR] postHandle");
if(modelAndView != null) {
logger.info(modelAndView.getViewName());
}
}
// View rendering 된 후 : view가 실행된 후 처리됨
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
logger.info("[INTERCEPTOR] afterCompletion");
}
}
▶︎▶︎ servlet-context.xml
<!-- interceptor -->
<interceptors>
<interceptor>
<mapping path="/*"/>
<beans:bean class="com.hw.mvc.common.interceptor.LoginInterceptor"/>
</interceptor>
</interceptors>
▶︎ 설정순서
21. com.mvc.upgrade.common.interceptor/LoginInterceptor (impl HandlerInterceptor)
22. servlet-context.xml : <interceptor>
Transaction
- 데이터베이스에 변경이 발생할 때 실행되는 모든 작업의 최소단위
- 모든 과정이 올바르게 처리되지 않으면 Rollback해줌 == 데이터 무결성
▶︎ 설정순서
23.(board)dao, biz, controller
24. servlet-context.xml : <tx:>
25. applicationContext.xml : transactionManager
전체 흐름 파악하기
'Web > Spring' 카테고리의 다른 글
[Spring]MVC_06.file (0) | 2020.11.06 |
---|---|
[Spring]MVC_05.security (0) | 2020.11.06 |
[Spring]MVC_3.로그인 (0) | 2020.11.05 |
[Spring]MVC_2. filter, aop 설정 (0) | 2020.11.04 |
[Spring]mapper_configuration doctype설정 (0) | 2020.11.02 |