๐Ÿ’ป ๊ณต๋ถ€ ๊ธฐ๋ก/๐Ÿƒ Spring

Spring | Interceptor(์ธํ„ฐ์…‰ํ„ฐ) / ๋กœ๊ทธ์ธ ยท ์•„์›ƒ ์ฒ˜๋ฆฌ

  • -

ํŠน์ • URI ๋กœ ์š”์ฒญ์‹œ Controller ๋กœ ๊ฐ€๋Š” ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๋Š” ์—ญํ• .

์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ ํด๋ž˜์Šค

- HandlerInterceptor

- HandlerInterceptorAdapter

 

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
: Controller ๋กœ ์š”์ฒญ์ด ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ์ˆ˜ํ–‰
postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
: ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”์„œ๋“œ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๊ณ  return ํ›„ ํ™”๋ฉด์„ ๋„์›Œ์ฃผ๋Š” ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๊ธฐ ์ง์ „์— ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋จ.
 afterCompletion()
: ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ˆ˜ํ–‰๋˜๊ณ  ํ™”๋ฉด ์ฒ˜๋ฆฌ๊นŒ์ง€ ๋๋‚œ ๋’ค ํ˜ธ์ถœ.

 

๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ธํ„ฐ์…‰ํ„ฐ ํด๋ž˜์Šค ๊ตฌ์„ฑ.

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ค‘ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ด๋™ํ•˜๊ธฐ ์ „ ์„ธ์…˜ ๊ฒ€์ฆ์„ ์œ„ํ•ด ์„ธ์…˜ ์œ ๋ฌด์˜ ์กฐ๊ฑด์„ ์„ค์ •ํ–ˆ๋‹ค.

public class AuthLoginInterceptor extends HandlerInterceptorAdapter { private static final Logger LOGGER = LoggerFactory.getLogger(AuthLoginInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. response.setHeader("Pragma", "no-cache"); // HTTP 1.0. response.setHeader("Expires", "0"); // Proxies. HttpSession session = request.getSession(); if (session.getAttribute("id") != null) { LOGGER.info("session true"); return true; } else { LOGGER.info("session false"); return false; } } }

 

dispatcher-servlet.xml ์ด๋‚˜ servlet-context.xml ์—์„œ ์ธํ„ฐ์…‰ํ„ฐ ๋นˆ(bean) ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ธํ„ฐ์…‰ํ„ฐ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.

ํ•ด๋‹น ๊ฐ์ฒด์™€ ์–ด๋–ค url์ด ์š”์ฒญ์‹œ์— ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ์ž‘๋™ํ• ์ง€๋ฅผ ์„ค์ •ํ•œ๋‹ค.

// servlet-context.xml <!-- Interceptor ๊ฐ์ฒด ์ƒ์„ฑ --> <beans:bean id="authenticationInterceptor" class="com.fireagency.volunteer.module.common.interceptor.AuthLoginInterceptor" > </beans:bean> <!-- Interceptor ์„ค์ • --> <mvc:interceptors> <mvc:interceptor> <!-- ์ „์ฒด ๋ฒ”์œ„ --> <mvc:mapping path="/**"/> <!-- ์˜ˆ์™ธ ๋ฒ”์œ„ --> <mvc:exclude-mapping path="/error/*.do"/> <mvc:exclude-mapping path="/login.do"/> <mvc:exclude-mapping path="/logout.do"/> <mvc:exclude-mapping path="/join.do"/> <mvc:exclude-mapping path="/resources/**"/> <beans:ref bean="authenticationInterceptor"/> </mvc:interceptor> </mvc:interceptors>

 

๋กœ๊ทธ์•„์›ƒ์„ ํ–ˆ์Œ์—๋„ ๋’ค๋กœ๊ฐ€๊ธฐ ์‹œ ๋กœ๊ทธ์ธ ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ.

์ด๋Ÿฐ ํ˜„์ƒ์˜ ์›์ธ์€ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์— ์žˆ๋Š” ๊ฐ’์„ ๋‹ค์‹œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ.

์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋’ค๋กœ๊ฐ€๊ธฐ ์‹œ ์บ์‹œ๊ฐ€ ๋‚จ์•„์žˆ์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

 

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ dispatcher-servlet.xml ์ด๋‚˜ servlet-context.xml ํŒŒ์ผ์—์„œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

<mvc:interceptors> <mvc:interceptor> <!-- ๋ฒ”์œ„ ์„ค์ • ๋ฐ ์˜ˆ์™ธ ๋ฒ”์œ„ ์„ค์ • --> </mvc:interceptor> <!-- ์•„๋ž˜ ๋‚ด์šฉ์€ ๋กœ๊ทธ์•„์›ƒํ›„ ๋’ค๋กœ๊ฐ€๊ธฐ๋ฒ„ํŠผ๋ˆŒ๋ €์„๋•Œ ๋‹ค์‹œ ๋กœ๊ทธ์ธ ๋˜๋Š”๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ. --> <beans:bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor" > <beans:property name="cacheSeconds" value="0" /> <beans:property name="useExpiresHeader" value="true" /> <beans:property name="useCacheControlHeader" value="true" /> <beans:property name="useCacheControlNoStore" value="true" /> <beans:property name="cacheMappings"> <beans:props> <!-- ์•„๋ž˜ ๊ฒฝ๋กœ์—๋งŒ ๋’ค๋กœ๊ฐ€๊ธฐ ์ œํ•œ์‹œํ‚ด. --> <beans:prop key="/login.do">86400</beans:prop> </beans:props> </beans:property> </beans:bean> </mvc:interceptors>

 

 

 

์ถœ์ฒ˜ | ์•…๋•๊ณ ์šฉ์ฃผ์˜ ๊ฐœ๋ฐœ ์ผ๊ธฐ

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.