홈페이지에는
홈페이지를 이용하는 사용자와, 홈페이지를 관리하는 관리자가 있습니다.
해킹을 시도하려는 해커가 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을 등록합니다.
일반 사용자가 접속
url로 admin page로 접속
Interceptor로 인해 login 페이지로 Redirect