반응형

andlerInterceptorAdapter 이 아이가 제공하는 preHandle요 메서드를 사용한다

preHandle저 아이는 Controller실행 요청 전에 개입

즉 Dispather에서 컨트롤러로 바로 가지 않고 무조건 컨트롤을 거치게 된다

andlerInterceptorAdapter 이건 저 아래 logonInterceptor.자바 코드에 익스텐드 된걸 볼 수 있다.

일단 가장먼저

xml셋팅!

<bean id="logonInterceptor" class="com.moku.comm.LogonInterceptor"/>

<bean id="secureHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="interceptors">

<list>

<ref bean="logonInterceptor"/>

</list>

</property>

<property name="urlMap">

<map>

<entry key="/member.do" value-ref="memberControl"/>

<entry key="/coupon.do" value-ref="couponControl"/>

</map>

</property>

</bean>

자.............이게 무슨말이냐면..................
SimpleUrlHandlerMapping 요놈을 이용해서 매핑을 해 주는데
인터셉터 프로퍼티에는 우리가 만들 자바파이 logonInterceptor를 레퍼런스로 이어주고
member.do, coupon.do 요 두놈으로 요청이 들어올때는 바로 인터셉트! 해서 검사를 해주고 보내겠다........란 거죠

아래는 LogonInterceptor쩜자바 코드

public class LogonInterceptor extends HandlerInterceptorAdapter {

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
UserSession userSession = (UserSession) WebUtils.getSessionAttribute(request, "userSession");
String check = request.getParameter("session");
if(check\!=null && check.equals("no")){
return true;
}
if (userSession == null) {
String url = request.getServletPath();
String query = request.getQueryString();
// 패키지 경로 알아내기 : org.springframework.web.util.UrlPathHelper&nbsp;
UrlPathHelper urlPathHelper = new UrlPathHelper();&nbsp;
String originalURL = urlPathHelper.getOriginatingRequestUri(request);&nbsp;

ModelAndView modelAndView = new ModelAndView("/member/memLogin");
if (query \!= null) {
modelAndView.addObject("logonForwardAction", url + "?" + query);
} else {
modelAndView.addObject("logonForwardAction", url);
}
throw new ModelAndViewDefiningException(modelAndView);
} else {
return true;
}
}
}

아까말했듯이 HandlerInterceptorAdapter 를 익스텐드하는 자바파일이고,
로그인 확인이 필요치 않은 요청에 대해서는 하나하나 session이라는 파라미터에 no라는 값을 받아와서 검사과정을 패스~시켜주는거죠,
아. preHandle 이녀석은 불리언 값이라서,, 트루일때 담 컨트롤러로 넘어가는겁니다!

이프문을 보면
세션검사해서 세션값이없다...........즉 로그인을 하지 않았다!!!
그렇다면 url과 query값을 받아와서
logonForwardAction 이란놈에 담아둡니다~

왜 이짓을 하냐!! 
나중에 로그인을 했을때 마지막에 머물렀던 페이지로 바로 돌아가게 하려고 페이지 정보를 쭉쭉 저장시켜놓는거지요 계~~속
무튼 그렇게저렇게 세션체크하고 페이지 정보 저장하고,
모델앤드뷰에다가 로그인 페이지를 걸어두고
마지막에 throw new ModelAndViewDefiningException(modelAndView); 로 훅 던져줍니다.
ModelAndViewDefiningException 요놈이 조금 생소한 놈인데
그냥 프리핸들러에서 트루가 아닐때.즉 폴스?펄스?아........false 일때 이놈을 던져줘야만!!합니다
쟤 없으면 에러납니다

무튼 이렇게 모든 컨트롤을 타기전에 이놈을 거치게되니
여기서 할 수 있는 일들이 무궁무진하겠지요!!!

Posted by npre
,