리다이렉트와 인터셉트 

세션이나 쿠키 정보가 잘못되었을 때, 리다이렉트나 인터셉트를 이용.

리다이렉트 : 컨트롤러에서 뷰를 분기하는 방법. 
인터셉트 : 컨트롤러 실행 전/후에 특정 작업을 가능하게 하는 방법.


- 리다이렉트 (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

+ Recent posts