스터디📖/Spring

5. 연결 - 1

호프 2021. 7. 19. 18:49

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC_renew/dashboard

 

자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌 - 인프런 | 강의

스프링 프레임워크 기본부터 실전 사용법까지! 충실하고 폭넓은 설명과 예제를 통해 현장에 바로 투입되어 활약하는 개발자로 거듭나세요., 자바 스프링 프레임워크로 내 개발자 커리어에 봄이

www.inflearn.com

섹션 5. 연결

21강 리다이렉트, 인터셉트

21-1 리다이렉트(redirect)

지금의 페이지에서 특정 페이지로 전환하는 기능

@RequestMapping(value = "/modifyForm")
public String modifyForm(Model model, HttpServletRequest request) {
		
	HttpSession session = request.getSession();
	Member member = (Member) session.getAttribute("member");
		
	if(null == member) {
		return "redirect:/"; //main 페이지로 리다이렉트
        
	} else {
		model.addAttribute("member", service.memberSearch(member));
	}
		
	return "/member/modifyForm";
}

ModelAndView를 이용하는 경우

@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;
}

21-2 인터셉터(Interceptor)

리다이렉트를 사용해야 하는 경우가 많은 경우 HandlerInterceptor(인터페이스)를 이용할 수 있다.
👉 HandlerInterceptor를 구현한 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);
	}
}

스프링 설정 파일

<interceptors>
	<interceptor>
		<mapping path="/member/modifyForm"/> <!--interceptor가 작동하는 경우 설정-->
		<mapping path="/member/removeForm"/>
		<!-- 
		<mapping path="/member/**"/> /member/아래에 들어오는 모든 경우에 작동
		<exclude-mapping path="/member/joinForm"/> exclude를 제외한..
		<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.bs.lec21.member.MemberLoginInterceptor"/>
	</interceptor>
</interceptors>