DEVLOG

리다이렉트, 인터셉터 본문

Spring

리다이렉트, 인터셉터

BINTHEWORLD 2022. 6. 14. 00:45

리다이렉트

컨트롤러에서 분기하는 방법

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

MemberController.java

	// Modify
	@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:/"; // 메인페이지로 유도
		} else {
			model.addAttribute("member", service.memberSearch(member));
		}
		
		return "/member/modifyForm";
	}
	// Remove
	@RequestMapping("/removeForm")
	public ModelAndView removeForm(HttpServletRequest request) { // ModelAndView 반환 
		
		ModelAndView mav = new ModelAndView();
		
		HttpSession session =  request.getSession();
		Member member = (Member) session.getAttribute("member");
		
		if(null == member) { // 로그인 안 되어있다면
			mav.setViewName("redirect:/");
		} else {
			mav.addObject("member", member);
			mav.setViewName("/member/removeForm");
		}
		
		
		return mav;
	}

인터셉터

컨트롤러 실행 전/후에 특정 작업을 가능하게 하는 방법

리다이렉트를 사용해야 하는 경우가 많은 경우 HandlerInterceptor(Interface)를 이용할 수 있다.

preHandle

컨트롤러 시작 전에 작동

postHandle

컨트롤러 시작 후에 작동

afterCompletion

컨트롤러, 뷰 모두 작업 마치고나서 작동

인터셉터 흐름도

MemberLoginInterceptor.java

HandlerInterceptorAdapter 클래스 : HandlerInterceptor 구현하는 클래스이며, 상속받아 사용한다.

public class MemberLoginInterceptor extends HandlerInterceptorAdapter { 

	// preHandle : 컨트롤러 시작 전에 작동
	@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; // 아래 코드 실행X
		}
		// null이라면
		response.sendRedirect(request.getContextPath() + "/");
		return false;
	}
    
	// postHandle : 컨트롤러 시작 후에 작동
	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		
		super.postHandle(request, response, handler, modelAndView);
	}
	
	// afterCompletion : 컨트롤러, 뷰 모두 작업 마치고나서 작동
	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		
		super.afterCompletion(request, response, handler, ex);
	}
}

servlet-context.xml

	<!-- 인터셉터 -->
	<interceptors>
		<interceptor>
			<!-- 범위 -->
			<mapping path="/member/modifyForm"/>
			<mapping path="/member/removeForm"/>
			<!-- 
			<mapping path="/member/**"/> member의 하위경로 모두 인터셉터 적용하지만, 
			<exclude-mapping path="/member/joinForm"/> exclude-mapping path는 제외하겠다는 의미
			<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>

 

🙆‍♂️출처🙇‍♂️

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

 

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

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

www.inflearn.com

 

Comments