오봉이와 함께하는 개발 블로그

Interceptor 적용 본문

Artineer 리뉴얼 프로젝트

Interceptor 적용

오봉봉이 2022. 9. 27. 01:23
728x90

Interceptor 적용

Interceptor(이하 인터셉터)에 대한 내용은 아래 링크를 참고하자.

인터셉터를 적용하고 문제가 발생했는데 우선 코드부터 보자.

@Slf4j
public class LoginCheckInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String requestURI = request.getRequestURI();

        HttpSession session = request.getSession();

        if(session == null || session.getAttribute(SessionConst.LOGIN_MEMBER) == null) {
            log.info("미인증 사용자 요청");
            // 로그인으로 redirect
            response.sendRedirect("/members/login?redirectURL=" + requestURI);
            return false;
        }
        return true;
    }
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LoginCheckInterceptor())
            .order(1)
            .addPathPatterns("/**")
            .excludePathPatterns("/", "/members/logout", "/members/join", "/members/login",
                    "/css/**", "/js/**", "/*.ico", "/error");
}

문제와 해결

인터셉터를 적용하고 @PostMapping("/logout")로 로그아웃을 했더니 내가 원했던 경로와 다른 경로로 이동했다.
-> http://localhost:8080/members/login?redirectURL=/login
그래서 /logout/members/logout으로 바꿔보았더니 내가 원하는 방향으로 작동했다.

하지만, 왜 그런지 방법을 찾지 못 하던 중 Spring Security에서 기본 로그아웃 경로가 /logout이라는 것을 알게 되었다.
Spring Security에서 로그아웃 후 기본 이동경로는 /login?logout이기 때문에 파라미터가 삭제되고 http://localhost:8080/members/login?redirectURL=/login로 이동한 것이라고 생각된다.

Spring Security의 설정을 변경하면 /logout을 사용할 수 있지만, 번거롭기 때문에 그냥 /members/logout를 사용했다.

728x90
Comments