SPRING_INTERCEPTOR
๐ SPRING
๐ Interceptor
Interceptor ๋
Interceptor๋ ๋์์ฑ๋ค๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Client์์ Server๋ก ๋ค์ด์จ Request ๊ฐ์ฒด๋ฅผ Controller์ Handler๋ก ๋๋ฌํ๊ธฐ ์ ์ ๊ฐ๋ก์ฑ์ ์ํ๋ ์ถ๊ฐ ์์
์ด๋ ๋ก์ง์ ์ํ ํ ํ Handler๋ก ๋ณด๋ผ ์ ์๋๋ก ํด์ฃผ๋ Module์ด๋ค.
Controller๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ /ํ์ ์ฒ๋ฆฌํ๋ค.
Interceptor ๊ตฌํ ์๋จ
-
HandlerInterceptor ์ธํฐํ์ด์ค
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ๋ฉ์๋ ์ฌ์ฉ -
HandlerInterceptorAdapter ์ถ์ ํด๋์ค ( HandlerInterceptor Interface๋ฅผ ์์ ๋ฐ์๋ค. )
์ถ์ ํด๋์ค๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํจ์ผ๋ก์จ ์์ ๋ง์ ์ธํฐ์ ํฐ ๋ง๋ค์ด ์ฌ์ฉ
Interceptor ์ค์
servlet-context.xml ์ ์ค์ ์ ํ๋ค.
<interceptors>
<interceptor>
<!-- ์ ์ฉ URL -->
<mapping path="/*"/>
<!-- Interceptor class ์์น -->
<beans:bean class="com.test.sample.AInterceptor"/>
</interceptor>
</interceptors>
์ฌ๋ฌ๊ฐ์ Interceptor ๋ฑ๋ก
<interceptors>
<interceptor>
<mapping path="/*"/>
<beans:bean class="com.test.sample.AInterceptor"/>
</interceptor>
<interceptor>
<mapping path="/*"/>
<beans:bean class="com.test.sample.BInterceptor"/>
</interceptor>
</interceptors>
Interceptor ์ํ ๊ณผ์
DispatcherServlet์ HandlerMapping์๊ฒ Client Request๋ฅผ ์ํํ Handler๋ฅผ ์ฐพ๋๋ก ์์ฒญ์ ๋ณด๋ธ๋ค.
์ด๋ HandlerExecutionChain ( ํธ๋ค๋ฌ ์คํ ์ฒด์ธ ) ์ด ๋์ํ๋๋ฐ, ์ด ๊ฒ์ ํ๋ ์ด์์ HandlerInterceptor ๋ฅผ ๊ฑฐ์ณ Controller๊ฐ ์คํ๋๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
HandlerInterceptor๋ฅผ ๋ฑ๋กํ์ง ์์์ ๋๋ ๋ฐ๋ก Controller๋ฅผ ์คํํ๋ค.
HandlerInterceptor๋ฅผ ๊ฑฐ์ณ Request์ ๋ํด ์ํ๋ ์์
, ๋ก์ง์ ์ํํ ํ Controller๋ก Request ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค.
์ฃผ๋ก ๋กํน, ๋ชจ๋ํฐ๋ง ์ ๋ณด ์์ง, ์ ๊ทผ ์ ์ด ์ฒ๋ฆฌ ๋ฑ์ ์ค์ Bussiness Logic๊ณผ๋ ๋ถ๋ฆฌ๋์ด ์ฒ๋ฆฌํด์ผ ํ๋ ๊ธฐ๋ฅ๋ค์ ๋ฃ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค.
servlet-context.xml
<interceptors>
<interceptor>
<mapping path="/*"/>
<beans:bean class="com.test.sample.AInterceptor"/>
</interceptor>
<interceptor>
<mapping path="/*"/>
<beans:bean class="com.test.sample.BInterceptor"/>
</interceptor>
<interceptor>
<mapping path="/*"/>
<beans:bean class="com.test.sample.CInterceptor"/>
</interceptor>
</interceptors>
- AInterceptor.preHandle()
- BInterceptor.preHandle()
- CInterceptor.preHandle() Controller
- CInterceptor.postHandle()
- BInterceptor.postHandle()
- AInterceptor.postHandle()
- CInterceptor.afterCompletion()
- BInterceptor.afterCompletion()
- AInterceptor.afterCompletion()
Interceptor ์ฅ์ ( ์ฌ์ฉ ์ด์ )
- ๊ณตํต ์ฝ๋ ์ฌ์ฉ์ผ๋ก ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
- ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น, ์๋ฒ ๋ถํ ๊ฐ์
- ์ฝ๋ ๋๋ฝ์ ๋ํ ์ํ์ฑ ๊ฐ์
Interceptor ์ ๊ณต method
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class Interceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
-
preHandle
์ง์ ๋ ์ปจํธ๋กค๋ฌ์ ๋์ ์ด์ ์ ์ํํ ๋์ ( ์ฌ์ ์ ์ด )
false๋ฅผ ๋ฐํํ๋ฉด request๋ฅผ ๋ฐ๋ก ์ข ๋ฃ -
postHandle
์ง์ ๋ ์ปจํธ๋กค๋ฌ์ ๋์ ์ดํ์ ์ฒ๋ฆฌํ ๋์ ( ์ฌํ ์ ์ด )
Controller ์ํ ํ ํธ์ถ -
afterCompletion
Dispatcher Servlet์ ํ๋ฉด ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ์ดํ ์ฒ๋ฆฌํ ๋์
view๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ต์ ์ ์กํ ๋ค ์คํ
์์ธ๊ฐ ๋ฐ์ํ์ฌ๋ ์คํ
Interceptor Session Check
preHandle()์ ์ธ์
์ฒดํฌ๋ฅผ ๊ตฌํํด ๋ณด์๋ค.
์ธ์
์ ์ ์ฅ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฐ์์์ ์ฌ์ฉ์ ์ ๋ณด๊ฐ ์กด์ฌํ๋ฉด true, ์กด์ฌํ์ง ์์ผ๋ฉด false๋ฅผ ํด์ฃผ๊ณ root๋ก ๋ค์ ๋ณด๋ธ๋ค.
์ฃผ๋ก ์ฌ์ฉ์๋ง์ด ์ฌ์ฉํ ์ ์๋ ํ๋ฉด๋จ์์ ์ด์ฉํ๋ค. ์ฌ๊ธฐ์๋ ๊ธฐ์ฌ๋ฅผ ์ ๊ฑฐ๋, ์์ , ์ญ์ ํ๋ ๋ถ๋ถ์ interceptor๋ฅผ ์ ์ํ๊ฒ ๋ค.
servlet-context.xml
<beans: bean id="confirm" class="com.ssafy.interceptor.ConfirmInterceptor"/>
<interceptors>
<interceptor>
<mapping path="/article/write"/>
<mapping path="/article/modify"/>
<mapping path="/article/delete"/>
<beans:ref bean="confirm"/>
</interceptor>
</interceptors>
ConfirmInterceptor.java
public class ConfirmInterceptor extends HanlderInterceptorAdaptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
// ์ธ์
๋ฐ์์ค๊ธฐ
HttpSession session = request.getSession();
// ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ
MemberDto memberDto = (MemberDto) session.getAttribute("userinfo");
// ์ฌ์ฉ์ ์ ๋ณด๊ฐ ์์ผ๋ฉด root๋ก ๋ค์ ๋ณด๋ธ๋ค
if(memberDto == null){
response.sendRedirect(request.getContextPath());
return false;
}
return true;
}
}