리다이렉트와 인터셉트
리다이렉트
리다이렉트(redirect)는 컨트롤러에서 뷰를 분기하는 방법으로, 지금의 페이지에서 특정 페이지로 전환하는 기능을 한다.
// Modify
@RequestMapping(value = "/modifyForm")
public String modifyForm(Model model, HttpServletRequest request) {
HttpSession session = request.getSession();
Member member = (Member) session.getAttribute("member");
/* member의 존재 여부 */
if(null == member) {
return "redirect:/"; // null일 경우 메인페이지로 리다이텍트
} else {
model.addAttribute("member", service.memberSearch(member));
}
return "/member/modifyForm";
}
/* ModelAndView 일 경우*/
// Remove
@RequestMapping("/removeForm")
public ModelAndView removeForm(HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
Member member = (Member) session.getAttribute("member");
if(null == member) {
mav.setViewName("redirect:/"); //main로 리다이렉트
} else {
mav.addObject("member", member);
mav.setViewName("/member/removeForm");
}
return mav;
}
인터셉트
따로 컨트롤러에 위처럼 설정할 필요 없이 HandlerInterceptorAdapter 를 상속받는 파일을 만들어서, 전체적으로 관리할 수 있다. 다시말해서, 리다이렉트를 사용해야하는 경우가 많은 경우 HandlerInterceptor를 이용하면 효율적이다.
/* MemberLoginInterceptor.java */
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class MemberLoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession(false);
if(session != null) {
Object obj = session.getAttribute("member");
if(obj != null)
return true;
}
/* 리다이렉트 */
response.sendRedirect(request.getContextPath() + "/");
return false;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}
위 파일은 스프링 프레임워크에서 지원하는 'HandlerInterceptorAdapter' 를 사용하는 것이다. 그리고 이를 사용함을 명시해주기 위해 스프링 설정 파일에 등록해주어야 한다.
<interceptors>
<interceptor>
<mapping path="/member/modifyForm"/>
<mapping path="/member/removeForm"/>
<beans:bean class="com.opentogether.test.member.MemberLoginInterceptor"/>
</interceptor>
</interceptors>
아래 처럼 표현도 가능하다.
<interceptors>
<interceptor>
<mapping path="/member/**"/> <!-- 이 경로 모든 파일을 리다이렉트-->
<!-- 아래는 예외 목록 -->
<exclude-mapping path="/member/joinForm"/>
<exclude-mapping path="/member/join"/>
<exclude-mapping path="/member/loginForm"/>
<exclude-mapping path="/member/login"/>
<exclude-mapping path="/member/logout"/>
<exclude-mapping path="/member/modify"/>
<exclude-mapping path="/member/remove"/>
<beans:bean class="com.opentogether.test.member.MemberLoginInterceptor"/>
</interceptor>
</interceptors>
'Web[웹] > Spring Framework' 카테고리의 다른 글
[Spring] JDBC 와 JdbcTemplate 그리고 커넥션 풀 (0) | 2019.12.05 |
---|---|
[Spring] 클라이언트와 서버간 연결을 유지하는 세션 & 쿠키 (0) | 2019.12.04 |
[Spring] Controller 객체 구현 : MVC 프로젝트 (2) (0) | 2019.12.03 |
[Spring] Service & Dao 객체 구현 : MVC 프로젝트 (1) (0) | 2019.11.28 |
[Spring] MVC 웹 프로그래밍 설계 모델 (With. STS) (0) | 2019.11.22 |