[TIL] 로그인 후 Redirect

su·2024년 6월 27일
0

TIL

목록 보기
88/93
post-thumbnail

1. 문제

로그인 기능을 구현하던 중,
로그인 이후에 원하는 화면으로 넘어가지 않는 문제가 생겼다.

혹시 토큰이 잘 담기지 않았나 검사창으로 확인도 했는데,
로그인 이후에 만든 JWT가 잘 담겨있으나
이후에 원하는 창으로 넘어가지를 않았다.

2. 시도

그렇다면 원하는 화면으로 넘기고자 시도를 해야한다 !

찾아본 방법을 하나씩 적용해보기 시작했다.

2-1. defaultSuccessUrl

WebsecurityConfiguration 클래스 내의 securityFilterChain 메소드에서 구현 가능하다.

Spring Security는 로그인 성공 이후에 사용자가 처음에 접근했던 페이지로 redirect 해주는데,
그 페이지가 아닌 다른 지정된 페이지로 redirect 할 수 있게 하는 메소드이다.

해당 사항을 적용했으나 달라지는 부분은 없었다.

httpSecurity.formLogin().defaultSuccessUrl("/");

2-2. successForwardUrl

해당 메소드는 로그인 성공 후 보내는 URL 이다.
특정 URL 호출로 다른 로직을 한 번 더 실행하게 된다.

httpSecurity.formLogin().successForwardUrl("/");

해당 메소드도 역시 내가 적어둔 대로 동작하지는 않았다.

3. 해결

로그인 Filter를 커스텀해서 사용했는데,
해당 로그인 Filter에서 로그인이 성공했을 경우에 동작하는 메소드가 있다.

successfulAuthentication 메소드 내부에 sendUrl을 이용하는 것이다.

httpServletResponse.sendUrl("/");

위의 코드를 추가했더니 원하는 대로 동작했다.

4. 배운 점

filter 단에서 successfulAuthentication 메소드 내부에서
sendUrl()을 이용하여 원하는 페이지로 redirect 할 수 있다는 점을 알게 되었다.

다만 WebSecurityConfiguration 클래스 내에서 동작하는 securityFilterChain 메소드 내에서도 formLogin으로 제어가 가능한 것을 알았는데,
내 코드에서 동작하지 않았던 이유를 좀 더 찾아보면 좋을 것 같다.

참고
https://twer.tistory.com/entry/Spring-Security-defaultSuccessUrl-successForwardUrl-successHandler

profile
(❁´◡`❁)

0개의 댓글