홈페이지에는
홈페이지를 이용하는 사용자와, 홈페이지를 관리하는 관리자가 있습니다.
해킹을 시도하려는 해커가 admin 페이지로 갈 수 있는 url을 알고 있다면
해당 url로 접속하여 admin의 권한을 얻어 자유롭게 홈페이지를 활보 할 수 있습니다.
이럴 때 사용자의 권한을 확인하여
해당 사용자가 관리자의 권한을 가지고 있다면 정상적으로 admin 페이지로 접속 할 수 있도록 이동하고,
그렇지 않다면 interceptor를 이용하여 login 페이지로 이동 시키도록 하겠습니다.
interceptor를 실행하는 controller를 만들기 위해
interceptor 패키지를 만든 후 AdminInterceptor.java를 작성합니다.
package net.eduSample.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import net.eduSample.common.vo.UserVO;
public class AdminInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest req,
HttpServletResponse res, Object obj) throws Exception {
HttpSession session = req.getSession();
UserVO user = (UserVO)session.getAttribute("user");
if(user == null || user.getVerify() != 9) {
res.sendRedirect("/login/form");
return false;
}
return true;
}
}
코드를 보면 AdminInterceptor는 HandlerInterceptorAdapter를 상속받는데
컨트롤러를 실행하기 전에 관리자 인지 확인하고 싶기에
preHandle를 override 했습니다.
(컨트롤러 실행 후 확인하려면 postHandle 사용!)
이제 현재 접속되어 있는 사용자의 세션(user)을 불러와서
UserVO형태로 형변환하여 user 에 저장합니다.
이제 세션을 불러왔으니 if문으로 세션(user)에 값이 없거나 권한 번호가 관리자의 번호가 아니라면
로그인 페이지로 넘겨줄것입니다.
Contorller를 작성했으니 interceptor controller를 인식 할 수 있도록 추가해주는데
web쪽인 Dispatcher-servlet.xml에서 설정해주어야 합니다.
<!-- Dispatcher-servlet.xml -->
<bean id="AdminInterceptor" class="net.eduSample.interceptor.AdminInterceptor" />
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/admin/**" />
<ref bean="AdminInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
bean 태그를 이용해 빈의 이름과 interceptor를 실행하는 controller의 위치를 작성합니다.
그리고 interceptor태그를 이용하여 경로와 bean의 id를 불러와서
경로와 bean을 등록합니다.