티스토리 뷰

Spring

Interceptor를 통한 로그인 처리

˙ᵕ˙ 2020. 10. 20. 19:23
  • Controller가 실행 되기 전, 실행 될때, 실행 후에 실행되도록 하는 클래스

컨트롤러가 실행되는 시간 측정

< TimeCheckInterceptor.java >

package kr.encore.bigdataShop.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

// 컨트롤러가 실행되는 시간을 측정(접속자 ip)
public class TimeCheckInterceptor extends HandlerInterceptorAdapter{
	private long start;
	private long end;
	
	// 컨트롤러 시작전
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		System.out.println("===========preHandle===========");
		System.out.println("접속한 ip" + request.getRemoteHost());
		start = System.nanoTime(); // 실행 전 시간 측정
		return true; // 다음 Interceptor나 Controller를 실행하겠다는 의미
	}
	
	// 컨트롤러 실행 후(뷰가 만들어지기 전)
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		end = System.nanoTime(); // 실행 후 시간 측정
		System.out.println("===========postHandle===========");
		String handlerClass = handler.getClass().getName();
		System.out.println(handlerClass + ":실행시간=>"+(end-start));
	}
}
  • spring설정 파일에 인터셉터 등록

<!-- 인터셉터 등록 -->
<interceptors>
    <interceptor>
        <!-- 요청 path를 정의 path 속성에 정의하는 url로 요청을 하면 인터셉터 실행 -->
        <mapping path="/**"/>
        <beans:bean class="kr.encore.bigdataShop.interceptor.TimeCheckInterceptor"/>
    </interceptor>
</interceptors>
  • 결과

로그인 체크

< LoginCheckInterceptor.java >

package kr.encore.bigdataShop.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import kr.encore.bigdataShop.member.MemberDTO;

public class LoginCheckInterceptor extends HandlerInterceptorAdapter{
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		//로그인 유무 체크
		HttpSession session = request.getSession(false);
		if(session!=null) {
			MemberDTO user = (MemberDTO) session.getAttribute("loginUser");
			if(user==null) {
				response.sendRedirect("/bigdataShop/member/login.do");
				return false;
			}
		}
		return true;
	}
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		super.postHandle(request, response, handler, modelAndView);
	}
}
  • spring 설정 파일에 등록

  • 등록한 순서대로 실행된다.

<!-- 인터셉터 등록 -->
<interceptors>
    <interceptor>
        <!-- 요청 path를 정의 path 속성에 정의하는 url로 요청을 하면 인터셉터 실행 -->
        <mapping path="/**"/>
        <beans:bean class="kr.encore.bigdataShop.interceptor.TimeCheckInterceptor"/>
    </interceptor>
    <interceptor>
        <mapping path="/board/**"/>
        <mapping path="/member/**"/>
        <exclude-mapping path="/member/login.do"/>
        <beans:bean class="kr.encore.bigdataShop.interceptor.LoginCheckInterceptor"/>
    </interceptor>
</interceptors>
  • 결과 (게시판을 눌렀을 때 세션에 아이디가 없으면 로그인 페이지로 이동)

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함