도서관 프로그램을 만들면서, 스프링 인터셉터로 유저 권한에 따라 다른 역할을 부여하는 기능을 구현해 보았다. 관리자는 도서 목록에 대한 CRUD가 가능하도록, 유저는 CRUD화면 이외의 다른 화면이 표시되도록 하였다.
스프링 프레임워크에서 실행되는, 클라이언트 요청 전후에 실행되는 컴포넌트

HandlerInterceptor 인터페이스preHandle(): 요청 처리 이전에 호출되는 메서드로, 컨트롤러가 실행되기 전에 수행할 작업을 구현false를 반환하면 요청 처리가 중단postHandle(): 컨트롤러가 실행된 후, 뷰가 렌더링되기 전에 호출되는 메서드로, 요청 처리 이후의 작업을 구현afterCompletion(): 뷰가 완전히 렌더링된 후 호출되는 메서드로, 응답 처리 이후의 작업을 구현servlet-context.xml 빈 등록하기<!-- 인터셉터 -->
<beans:bean id="sampleInterceptor"
class="bitedu.bipa.book.utils.AuthorizationInterceptor" />
<interceptors>
<interceptor>
<mapping path="/admin/**" />
<beans:ref bean="sampleInterceptor" />
</interceptor>
</interceptors>
package bitedu.bipa.book.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class AuthorizationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String userRole = (String) request.getSession().getAttribute("id");
System.out.println("인터셉터 " + userRole);
if (userRole != null && userRole.equals("admin")) {
return true;
}
return false;
}
@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 {
}
}
정말 유익한 글이었습니다.