Spring interceptor

반응형

Spring InterCeptor 를 이용한 Session Login Check

InterCeptor에서 제공하는 3가지 메소드가 각각 실행되는 시점.

  • preHandle: Controller 실행 요청 전
  • postHandle: view(jsp)로 forward 되기 전에
  • afterCompletion: 요청이 끝난 뒤

session check 시점은 dispatcher -> controller 로 요청이 오기 전에 실행..되야 하므로 preHandle 메소드 시점에 처리.

  • CommonInterceptor.java
public class CommonInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        log.debug("===============================preHandler===============================");
        if (SessionUtils.getSessionVO() == null) {
            //14.11.25 jp add.. 
            //session validation check order & mypage * method type : submit, ajax
            if ((request.getRequestURI().indexOf("/biz/ord/order/") > -1) || (request.getRequestURI().indexOf("/biz/mpg/") > -1)) {
                String ajaxCall = (String) request.getHeader("AJAX");

                if ("true".equals(ajaxCall)) {
                    response.sendError(901);
                } else {
                    response.sendRedirect(Globals.PROTOCOL_HTTPS + Globals.DOMAIN + "/base/login/loginForm.do");
                    response.flushBuffer();
                }
                return false;
            }
        }
        return true;
    }
}
  • Sevlet-interceptor.xml

submit에 경우는 sendRedirect 로 리다이렉트가 가능하지만, ajax Call에 경우는 sendRedirect가 호출 되더라도 Callback 처리 되기때문에 추가해줘야 한다.

ajax 공통 함수에 jqXHR.status = 901로 리턴 될 경우 로그인 페이지로 핸들링 처리를 추가해준다.

  • ajax 호출시 beforeSend 에 ajax 호출을 Header에 기록.
$.ajax({ 
    beforeSend: function (xmlHttpRequest) { 
        xmlHttpRequest.setRequestHeader("AJAX", "true"); 
    } 
});
반응형
반응형
Spring Interceptor 설정

 

Spring login interceptor 설정을 위해 servlet.xml 설정 파일에 interceptor를 설정 합니다.

<bean id="loginUrlHandlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="1">            
	<property name="interceptors">          
		<list>             
			<ref bean="loginInterceptor"></ref>
		</list>      
	</property>         
</property> 
</bean>

위와 같이 설정을 하고 Interceptor Class를 생성합니다.

@Service 
public class LoginInterceptor extends HandlerInterceptorAdapter { 	
	@Override  	
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	String path = request.getServletPath();      	    
    	
        if(path.equals("/login.do")) {    		
        	return true; 	    
        } else {    		
			@SuppressWarnings("unchecked")   		
            Map<string, object> userMap = (Map<string, object>) request.getSession().getAttribute("userMap");   		
            
            if(userMap == null) {     		      
            	response.sendRedirect("/login.do");    		      
            	return false;    		
            } else {     		      
            	return true;    		
            }  	   
        }  	
    } 
}

login.do로 접근하는 url을 제외하고 세션을 체크하여 userMap에 데이터가 null 일 경우 login.do 페이지로 Redirect 처리를 수행합니다.

반응형

+ Recent posts

반응형