Notice
Recent Posts
Recent Comments
Link
혜야의 코딩스토리
[Spring] Interceptor 인터셉터 (로그인 세션 체크 Interceptor로 처리하기) 본문
📌 Interceptor(인터셉터) - 요청을 가로채는 작업( 메인 액션 전,후)
매개변수 - HttpServletRequest, HttpServletResponse
용도 - 로그인 처리, pc웹/모바일웹 분기 처리 등
ex) 로그인 세션체크 파일을 각 페이지마다 include하지 않고 인터셉터로 대체하면 좋음
📌실행순서
Filter > DispatcherServlet => Interceptor = > AOP
Filter(필터) - DispatcherServlet 이전에 실행
📌 AOP
@Around => ProceedingJoinPoint 객체 사용
@Before, @After => JoinPoint 객체 사용
📌 요청형식(파일 등)에 따른 웹서버에서의 처리
hello.html 통과 hello.jsp => JspServlet hello.do등 html,jsp이외의 모든 요청 => DefaultServlet => DispatcherServlet(스프링)
📌 웹서버에서의 요청처리 순서
login.do => Filter =>DispatcherServlet => Interceptor
1) Filter - 선처리만
2) DispatcherServlet
3) Interceptor - url 기반 (전후처리)
4) AOP - 코드에 기반, @Before(전처리), @After(후처리), @Around(전후처리)
📌 로그인 세션 체크를 Interceptor으로 처리하기
💡) 인터셉터는 HandlerInterceptorAdapter라는 추상클래스를 상속받아서
preHandle, postHandle 메서드를 오버라이딩하여 사용함.
//로그인 전용 인터셉터
public class LoginInterceptor extends HandlerInterceptorAdapter {
//메인 액션이 실행되기 전 항상 실행되는 선처리 작업
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//세션 객체 생성
HttpSession session=request.getSession();
if(session.getAttribute("userid")==null) {//세션이 없으면(로그아웃 상태)
response.sendRedirect(request.getContextPath()
+"/member/login.do?message=nologin");//로그인 페이지로 이동
return false;//메인 액션으로 가지 않고 멈춤(계속 진행x)
}else {//로그인 상태
return true;//메인 액션으로 이동(계속 진행O)
}
}
//메인 액션이 실행된 후 후처리 작업
//오버라이딩만 함
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
}
💡💡) servlet-context.xml에서 인터셉터 빈 등록 & url mapping처리를 쌍으로 처리한다.
<!-- 인터셉터 빈을 등록 -->
<beans:bean id="loginInterceptor"
class="com.example.spring02.interceptor.LoginInterceptor">
</beans:bean>
<!-- 인터셉터 호출을 위한 url mapping -->
<interceptors>
<interceptor>
<mapping path="/shop/cart/list.do" />
<mapping path="/shop/cart/insert.do" />
<beans:ref bean="loginInterceptor" />
</interceptor>
</interceptors>
'꿈 : 멋진 개발자 🧸 > Java' 카테고리의 다른 글
[Spring] JMeter 사용법 - JMeter란?, 테스트 사용법 (0) | 2023.11.01 |
---|---|
[Spring] spring MVC redirect시 https -> http로 요청되는 문제 (0) | 2023.10.17 |
[Spring] @RequestBody / @ResponseBody 어노테이션이란? (0) | 2022.10.01 |
[Spring] AOP 관점 지향 프로그래밍 (0) | 2022.09.30 |
[Spring] 스프링 프레임워크의 특징 (0) | 2022.09.23 |