2016. 1. 5. 15:54ㆍframework/spring
interceptor 를 사용하는 예제이다.
홈페이지를 만들다 보면 여러 시점에서 특정 기능을 수행하여야 할 경우가 생긴다.
대표적인 함수로는 Filter와 Interceptor가 있다.
하지만 이 두 함수는 호출하는 시점이 다르다.
Filter 는 Dispatcher 가 호출되기 전에 실행하고, Interceptor는 Dispatcher이 호출된 후에 실행된다.
Interceptor는
org.springframework.web.servlet.handler.HandlerInterceptorAdapter를 상속받아서 Interceptor을 구현한다.
그리고 총 3가지의 함수를 제공한다.
perHandle() : Controller가 실행되기 전에 호출 / boolean으로 return하며 Controller을 실행 여부를 결정
postHandle() : Controller가 실행된 후 View를 호출하기 전에 실행
afterCompletion() : View 작업까지 마치고 호출 / responseBody를 이용할 경우 값을 View에 전달 후 호출
간단한 이론을 마치고
내가 Interceptor을 사용하게 된 이유는 특정 페이지마다 권한을 체크해야 할 경우가 생겼다.
시점은 당연히 perHandle (컨트롤러가 실행되기 전) 이다.
1 ) dispatcher-servlet.xml
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="0">
<!-- 모든 @Controller에 인터셉터 등록 -->
<property name="interceptors">
<list>
<ref bean="checkInterceptor"/>
</list>
</property>
</bean>
<bean id="checkInterceptor" class="go.kr.CheckInterceptor" >
<!-- 인증 체크가 필요 없는 URL 리스트 -->
<property name="urls">
<list>
<value>/login/login.do</value>
<value>/index.do.*</value>
<value>/logout/logout.do</value>
<value>/logout/logout.do</value>
<value>/login.do</value>
</list>
</property>
</bean>
|
cs |
2 ) CheckInterceptor.java
public class LoginCheckInterceptor extends HandlerInterceptorAdapter {
// 인증 체크가 필요 없는 URL 리스트
List<String> urls;
public void setUrls(List urls) {
this.urls = urls;
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
// 기능을 수행하고 Controller를 실행 하려면
// return true;
// 특정 체크에서 일치하지 않는다면
// response.sendRedirect("특정 에러 페이지로 보낸다");
// return false;
// 인증 체크가 필요 없는 URL 체크
for(int i=0; i < urls.size(); i++){
if (request.getRequestURI().matches(urls.get(i))) {
) {
System.out.println("== 인증 체크가 필요 없는 URL ============================");
System.out.println("== URL : "+ urls.get(i) +" ============================");
System.out.println("== return true ============================");
System.out.println("== 인터셉터 종료 ============================");
return true;
}
// 첫페이지가 로그인 페이지일 경우
// 첫페이지 jsession때문에 request.getRequestURI().indexOf("/login/login.do") != -1 사용
if(request.getRequestURI().indexOf(urls.get(i)) != -1){
return true;
}
}
// 세션이 있는지 체크
// 세션에 로그인한 정보가 있는지 체크
return true;
}
}
|
cs |
도움이 되셨다면 공감을 부탁드립니다. ^^
'framework > spring' 카테고리의 다른 글
SPRING @Async를 활용한 multi thread 구현 - 2 - AsyncConfigurer 생성 (0) | 2017.07.11 |
---|---|
SPRING @Async를 활용한 multi thread 구현 - 1 - 개요 (0) | 2017.07.11 |
spring excel csv download 하기 / super-csv jar 사용하기 / AbstractView (0) | 2017.06.30 |
Security 로그인 후 이전페이지 가기 | spring (4) | 2016.01.05 |
특정 JAVA , JSP 에서 Bean 객체 가져오기 | spring (0) | 2016.01.05 |
메일 보내기 / mail sample | spring (0) | 2016.01.05 |
vo list / form list / @ModelAttribute list / list로 받기 | spring (0) | 2016.01.05 |
@ResponseBody / ajax / 아작스 / messageConverters | spring (0) | 2016.01.05 |
스케줄러 / scheduler | spring (0) | 2016.01.05 |
spring form tag (0) | 2016.01.05 |