SPRING
2016.03.03 / 19:09

[Spring 3.2] Interceptor¿¡¼­ ControllerÀÇ ¾î³ëÅ×ÀÌ¼Ç Ã¼Å©Çϱâ

dwsi
Ãßõ ¼ö 342

ÀÎÁõÀÌ ÇÊ¿äÇÑ ¼­ºñ½º¸¦ °³¹ßÇÒ °æ¿ì, Interceptor¿¡¼­ ·Î±×ÀÎ À¯¹«¸¦ È®ÀÎÇÏ´Â ·ÎÁ÷À» Ãß°¡ÇÏ¿© °¢ ÄÁÆ®·Ñ·¯¿¡ ÀÎÁõ ·ÎÁ÷À» Ãß°¡·Î ÀÛ¼ºÇÏÁö ¾Êµµ·Ï ÇÒ¼ö ÀÖ½À´Ï´Ù.


¸¸¾à À̶§ ¾î¶² ÄÁÆ®·Ñ·¯ÀÇ ¸Þ¼Òµå´Â ·Î±×ÀÎÀ» üũÇÏ°í ¾î¶² ÄÁÆ®·Ñ·¯ÀÇ ¸Þ¼Òµå¿¡´Â ·Î±×ÀÎÀ» üũÇÏÁö ¾Êµµ·Ï ÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î¿ä?


½ºÇÁ¸µ 3.2 ºÎÅÍ´Â mvc:interceptor ºÎºÐ¿¡ exclude-mapping À̶ó´Â ¿¤¸®¸ÕÆ®°¡ Ãß°¡µÇ¾î ±âÁ¸ÀÇ ½ºÇÁ¸µ ¹öÀüº¸´Ù ½±°Ô ÀÎÅͼÁÅÍÀÇ Àû¿ëÀ» Á¦¿Ü½Ãų¼ö ÀÖ½À´Ï´Ù.

<mvc:interceptor> <mvc:mapping path="/**"/> <exclude-mapping path="/info/**"/> <bean class="net.krespo.interceptor.LoginCheckInterceptor" /> </mvc:interceptor>

ÀÌ·¸°Ô exclude-mappingÀ» »ç¿ëÇϸé LoginCheckInterceptor´Â /info/ ·Î ½ÃÀÛÇÏ´Â ÄÁÆ®·Ñ·¯¿¡ ÀÎÅͼÁÅÍ Àû¿ëÀ» Á¦¿Ü ½Ãų¼ö ÀÖ½À´Ï´Ù.


±×·±µ¥ ¸¸¾à /info/my´Â ·Î±×ÀÎ ÀÎÅͼÁÅ͸¦ ¼öÇà½ÃÅ°°í /info/test´Â ·Î±×ÀÎ ÀÎÅͼÁÅ͸¦ ¼öÇà½ÃÅ°·Á¸é ¾î¶»°Ô ÇؾßÇÒ±î¿ä?


¹°·Ð exclude-mappingÀ» ¿©·¯°³ µî·ÏÇÏ¸é µÇÁö¸¸ ·Î±×ÀÎÀÌ ÇÊ¿äÇÏÁö ¾ÊÀº ÄÁÆ®·Ñ·¯°¡ »ý±æ¶§¸¶´Ù exclude-mappingÀ» ¼±¾ðÇϴ°ÍÀÌ ±ÍÂú°Ô ´À²¸Áú°Ì´Ï´Ù.


ÀÌ·²¶§´Â ÀÓÀÇÀÇ ¾î³ëÅ×À̼ÇÀ» »ý¼ºÇÏ¿© ÀÎÁõÀÌ ÇÊ¿äÇÏÁö ¾ÊÀº ÄÁÆ®·Ñ·¯ÀÇ ¸Þ¼Òµå¿¡ ¾î³ëÅ×À̼ÇÀ» ºÙÀÌ°í, ¾î³ëÅ×ÀÌ¼Ç À¯¹«¸¦ ÀÎÅͼÁÅÍ¿¡¼­ È®ÀÎÇÏ¿© ·Î±×ÀÎÀ» ÇÒÁö ¾ÈÇÒÁö¸¦ Çϸé Á»´õ ÆíÇÏ°Ô °³¹ßÀ» ÁøÇàÇÒ ¼ö ÀÖÀ»°Í °°½À´Ï´Ù.


ÀÌÁ¦ºÎÅÍ º»°ÝÀûÀ¸·Î ÀÎÅͼÁÅÍ¿¡¼­ ÄÁÆ®·Ñ·¯ÀÇ ¾î³ëÅ×À̼ÇÀ» üũÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.


1. ¾î³ëÅ×ÀÌ¼Ç »ý¼º

package net.krespo.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoLoginCheck {
}

NoLoginCheck¶ó´Â ¾î³ëÅ×À̼ÇÀ» »ý¼ºÇÏ¿´½À´Ï´Ù. ÀÌ ¾î³ëÅ×À̼ÇÀ» »ç¿ëÇÏ¿© ¾î³ëÅ×À̼ÇÀ» ¸Þ¼Òµå¿¡ Ãß°¡¸¦ ÇßÀ¸¸é ·Î±×ÀΠüũ¸¦ ÇÏ°í, ¾î³ëÅ×À̼ÇÀÌ ¾øÀ¸¸é ·Î±×ÀΠüũ¸¦ ÇÏÁö ¾Êµµ·Ï ÇÒ°ÍÀÔ´Ï´Ù.


2. ÄÁÆ®·Ñ·¯¿¡ ¾î³ëÅ×ÀÌ¼Ç Ãß°¡


@Controller
public class MyController {
	
	@RequestMapping("/my/info")
	@NoLoginCheck 
	public ModelAndView myInfo(){
		...
	}
	
}

3. Interceptor¿¡¼­ ¾î³ëÅ×ÀÌ¼Ç Ã¼Å©Çϱâ

public class LoginInterceptor extends WebContentInterceptor {
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {
		//@NoCheckLogin ¾î³ëÅ×À̼ÇÀÌ ÄÁÆ®·Ñ·¯¿¡ »ç¿ëµÇ¾ú´ÂÁö üũÇÔ
		NoCheckLogin usingAuth = ((HandlerMethod) handler).getMethodAnnotation(NoCheckLogin.class);

		//NoCheckLogin ¾î³ëÅ×À̼ÇÀÌ ¾øÀ½À¸·Î ¹«Á¶°Ç ·Î±×ÀΠüũ
		if(usingAuth == null) {
			//TODO ·Î±×ÀΠüũ
		}
		//NoCheckLogin ¾î³ëÅ×À̼ÇÀÌ ¾øÀ½À¸·Î ·Î±×ÀΠüũ ÇÏÁö ¾ÊÀ½
		else {
			//TODO Ãß°¡ÀÛ¾÷
		}
	}	
}

°¡Àå Áß¿äÇÑ ºÎºÐÀº preHandler ¸Þ¼ÒµåÀÇ handler Object¸¦ HandlerMethod·Î ŸÀÔÄɽºÆà ÇÏ´Â ºÎºÐÀÔ´Ï´Ù. ÀÌ·¸°Ô HandlerMethod·Î ¹Ù²Û handler¿ÀºêÁ§Æ®ÀÇ getMethodAnnotationÀ» ÅëÇؼ­ ¾ÕÀ¸·Î ½ÇÇàµÉ ÄÁÆ®·Ñ·¯ÀÇ ¸Þ¼Òµå¿¡ ÇØ´ç ¾î³ëÅ×À̼ÇÀÌ Ãß°¡°¡ µÇ¾ú´ÂÁö ¾ÈµÇ¾î ÀÖ´ÂÁö¸¦ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.


À§ ³»¿ëÀº ½ºÇÁ¸µ 3.2¿¡¼­ È®ÀÎÇØ º¸¾Ò½À´Ï´Ù. ±×·¯³ª ½ºÇÁ¸µ 3.0¿¡¼­´Â ÇØ´ç handler Object¸¦ HandlerMethodÀÇ ¿ÀºêÁ§Æ®°¡ ¾Æ´Ñ ¾ÕÀ¸·Î ½ÇÇà½Ãų ÄÁÆ®·Ñ·¯¿ÀºêÁ§Æ®(À§ÀÇ ¿¹Á¦¿¡¼­´Â LoginController)°¡ ¹ÝȯÀÌ µÊÀ¸·Î À§ÀÇ ÄÚµå´Â 3.0¿¡¼­´Â »ç¿ëÇÒ ¼ö°¡ ¾ø½À´Ï´Ù~(3.1¿¡¼­´Â üũ¸¦ Çغ¸Áö ¸øÇß½À´Ï´Ù. 3.1¿¡¼­ »ç¿ëÇØ º¸½Å ºÐ²²¼­´Â ´ñ±Û·Î ¾Ë·ÁÁÖ¼¼¿ä~^^)