본문 바로가기
프레임워크/스프링

리다이렉트, 인터셉터

by 멋진 개구리 2021. 3. 10.
반응형

리다이렉트 re + direct 다시 지시하다.
로그인 정보가 없는데 회원정보를 수정하거나, 회원 사이트에 비회원이 들어올때 사용할수 있다.

다음과같이 사용할수 있다.

// 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";
	}

리다이렉트를 자주 사용하지 않는다면 컨트롤러에서 리다이렉트를 해주면 좋으나 공통된 구분이 많을땐 인터셉터를 사용한다고 한다.
preHandle은 컨트롤러를 타기전에 실행되는 매서드이다.

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;
	}
	
<interceptors>
		<interceptor>
        	<!-- 특정 리퀘스트만 지정할수 있다. -->
			<mapping path="/member/modifyForm"/>
			<mapping path="/member/removeForm"/>
			<!-- 공통된 모든 리퀘스트를 지정할수 있다.
			<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.bs.lec21.member.MemberLoginInterceptor"/>
		</interceptor>
	</interceptors>

위는 servlet-context.xml에 작성된 인터셉터다. bean class를 참조한다.

preHandle()은 컨트롤러를 타기전에
postHandle()은 컨트롤러를 타고 난후
afterCompletion()은 컨트롤러, 뷰페이지가 끝나고 난후 실행된다.

반응형

댓글