자바 로그인체크 (Interceptor를 이용하여)
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 UrlPathHelper urlPathHelper = new UrlPathHelper(); String originalURL = urlPathHelper.getOriginatingRequestUri(request); 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 일때 이놈을 던져줘야만!!합니다
쟤 없으면 에러납니다
무튼 이렇게 모든 컨트롤을 타기전에 이놈을 거치게되니
여기서 할 수 있는 일들이 무궁무진하겠지요!!!