프로젝트

[SpringBoot & JPA 프로젝트] 인터셉터 / 404,500 error page

sian han 2022. 9. 28. 16:54

※ 인터셉터 Interceptor

로그인 후 접속 가능한 페이지들 ex) 내 정보, 내 주문내역, 장바구니 etc

은 비로그인 상태로 접속 시도 시 로그인 페이지로 이동하도록 인터셉터 구현

 

 

1. LoggerInterceptor 클래스 생성해서 인터셉터 조건 생성 / 인터셉터로 이동할 url 설정

2. webconfig 클래스 생성해서 인터셉터가 적용될 url 설정

 


 

 

▷ HandlerInterceptor 를 implements 한 LoggerInterceptor 클래스 생성

public class LoggerInterceptor implements HandlerInterceptor {

 

▷ preHandle 메서드를 오버라이딩 하여 session 체크

  @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {

 

▷ session 값 존재하지 않으면 alert 과 함께 로그인 페이지로 이동

  if (session == null || session.getAttribute("id") == null) {
            log.info("로그인 필요");

            msg ="로그인 후 이용가능한 서비스입니다";
            url = "location.href = '" + request.getContextPath() + "/login';";
            log.info("request.getContextPath()={}",request.getContextPath());
            log.info("url={}",url);

 

LoggerInterceptor.java 전체 코드

@Slf4j
public class LoggerInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        HttpSession session = request.getSession(false);

        String msg = "", url = "";
        if (session == null || session.getAttribute("id") == null) {
            log.info("로그인 필요");

            msg ="로그인 후 이용가능한 서비스입니다";
            url = "location.href = '" + request.getContextPath() + "/login';";
            log.info("request.getContextPath()={}",request.getContextPath());
            log.info("url={}",url);


            log.info("현재 위치 : " + request.getRequestURI());
            String requestURI = request.getRequestURI();

            Cookie cookie = new Cookie("tempURL", requestURI);
            cookie.setPath("/");
            cookie.setMaxAge(60*3);	//3분동안
            response.addCookie(cookie);

            response.setContentType("text/html; charset = UTF-8");
            PrintWriter out = response.getWriter();
            out.print("<script type='text/javascript'>");
            out.print("alert('" + msg + "');");
            out.print(url);
            out.print("</script>");
            return false;
        }

        return true;

    }

 

 


WebConfig 클래스 생성해서 비로그인 상태로 접근가능 / 불가능한 url 설정해주기

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggerInterceptor())
                .addPathPatterns("/cart/**")
                .addPathPatterns("/item/**")
                .addPathPatterns("/mypage/**")
                .addPathPatterns("/order/**")
                .excludePathPatterns("/item/detail/**");
    }
}

 

비로그인 상태로 접근 가능한 페이지는 몇개 안되기때문에

addPathPatterns(/**) 설정하고, excludePathPatterns 로 접근 가능한 페이지 몇개만 설정하고 싶었으나

카카오 로그인 시 외부로 이동하는 경로가 있어서

그냥 api 를 수정하고 addPathPatterns 에 넣음

 

 


※ Error Page

 

완전 신기하고 편리한 SpringBoot 의 기능

 

▷ resources > static 경로에 ' Error ' 이름의 폴더를 생성하고 그 안에 404.html, 500.html 파일을 생성해서 에러페이지를 디자인하면 404,500 코드를 받았을 때 자동으로 해당 페이지가 response 됨