로그인이 필요한 페이지는 인터셉터를 적용해 로그인 사용자만 이용가능하도록 처리한다.
인터셉터는 컨트롤러 전에 미리 처리해서 실행되는 코드로 컨트롤러로 가지않고 미리 처리하기 때문에 단계 간소화로 메모리 낭비를 줄일 수 있다.
1. Alt+Shift+S ➡️ Override/Implements Methods 클릭
2. preHandle() 체크 ➡️ OK
public class memberInterceptor extends HandlerInterceptorAdapter implements memberLoginSession{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
HttpSession session = request.getSession(); //세션 얻어오기
if(session.getAttribute(LOGIN) == null) {//여기서 미리 작성
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<script>alert('로그인 후 이용가능합니다.'); "
+ "location.href ='"+request.getContextPath() +"/member/login';</script>");
return false; //해당 redirect
}
System.out.println("인터셉터실행");
return true;
}
}
세션을 얻어오고 로그인이 되있지 않다면 경고창이 뜨면서 로그인 페이지로 이동한다.
return true
는 ㅎ해당 사용자가 요청한 경로가 들어가고 인터셉터가 끝나면 컨트롤러가 실행된다.
url을 servlet-context.xml
에 설정한다.
1. 빈만들기
2. 인터셉터 설정
3. 경로 설정
<!-- 빈만들기 class= "자료형" id = "변수명" --> <beans:bean id ="변수명" class="자료형"/> <!-- 인터셉터 설정 --> <interceptors> <interceptor> <mapping path="경로설정"/> <beans:ref bean = ""/> </interceptor> </interceptors> </beans:beans>
<beans:bean id ="memberInterceptor"
class="com.care.root.member.interceptor.memberInterceptor"/>
<interceptors>
<interceptor>
<mapping path="/board/reviewWrite" />
<mapping path="/board/reviewDetail" />
<mapping path="/booking/booking" />
<beans:ref bean="memberInterceptor" />
</interceptor>
</interceptors>
</beans:beans>
글 작성, 이용 후기조회, 예약하기를 인터셉터로 적용했다.