리다이렉트와 인터셉트
세션이나 쿠키 정보가 잘못되었을 때, 리다이렉트나 인터셉트를 이용.
리다이렉트 : 컨트롤러에서 뷰를 분기하는 방법.
인터셉트 : 컨트롤러 실행 전/후에 특정 작업을 가능하게 하는 방법.
- 리다이렉트 (redirect)
지금의 페이지에서 특정 조건을 만족하지 않으면 다른 페이지로 전환시키는 기능.
@RequestMapping("/modifyForm")
public String modifyForm(Model model,
HttpServletRequest request) {
HttpSession session = request.getSession();
Member member = (Member) sessioin.getAttribute("member");
if(member == null){
return "redirect:/"; // 회원정보 수정 요청시 회원정보 세션이 없으면 리다이렉트.
}else{
model.setAttribute("member", service.memberSearch(member));
}
return "/member/modifyForm";
}
ModelAndView로 리턴시에는
mav.setViewName("redirect:/");
- 인터셉트 (intercept)
로그인을 해야지만 이용할수 있는 페이지가 많은 경우 그떄마다 체크해서 redirect를 심어주기 번거로움.
따라서 리다이렉트를 사용해야 하는 경우가 많은 경우 HandlerInterceptor를 이용할 수 있다.
spring에서는 HandlerInterceptor를 구현한 HandlerInterceptorAdapter라는 것을 제공.
HandlerInterceptorAdapter 얘를 상속 받아서 이용하면 됨.
HandlerInterceptorAdapter에는
preHandle과 posetHandle 그리고 afterCompletion이 있다.
각각 필요에 따라 오버라이딩해서 사용하면 된다.
preHandle() : 컨트롤러가 작업을 수행하기 전에 실행.
posetHandle() : 컨트롤러가 작업을 마친후에 실행.
afterCompletion() : 컨트롤러와 뷰작업을 모두 마친후에 callback됨.
보통 preHandle()을 많이 사용하며 안에서
session 체크 후 null이면 리다이렉트 시키는 형태로 많이 쓴다.
해당 HandlerInterceptorAdapter를 구현한 클래스 는
스프링 설정파일에서 interceptor태그 추가
.
.
<interceptors>
<interceptor>
<mapping path="member/modifyForm"/>
<mapping path="member/removeForm"/>
<!-- 이런 방식도 가능.
<mapping path="member/**"/>
<exclude-mapping path="member/joinForm"/>
<exclude-mapping path="member/loginForm"/>
-->
<beans:bean class="com.package.MemberLoginInterceptor"/> // 매핑에 설정된 경로로 접근하면 무조건 MemberLoginInterceptor부터 탐.
</interceptor>
</interceptors>
.
.
'Web개발' 카테고리의 다른 글
세션(Session)과 쿠키(Cookie) (0) | 2020.04.15 |
---|---|
TypeScript 란 ? (0) | 2020.02.01 |
시맨틱 마크업 (0) | 2020.01.28 |
servlet 버전 별 web.xml 스키마 예제 (0) | 2020.01.19 |
robots.txt 파일 (0) | 2020.01.19 |