오봉이와 함께하는 개발 블로그
Interceptor 적용 본문
728x90
Interceptor 적용
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
'Artineer 리뉴얼 프로젝트' 카테고리의 다른 글
비밀번호 찾기 이메일 전송 [JavaMailSender(SimpleMailSender, MimeMessage)] (0) | 2022.09.28 |
---|---|
보완할 기능 (0) | 2022.09.27 |
검증(@Validated)에서 groups 사용 문제 (0) | 2022.09.26 |
Form에서 @Embeddable 객체 응답받기 (1) | 2022.09.23 |
기능 정리 (0) | 2022.09.22 |
Comments