로그인 기능을 구현하던 중,
로그인 이후에 원하는 화면으로 넘어가지 않는 문제가 생겼다.
혹시 토큰이 잘 담기지 않았나 검사창으로 확인도 했는데,
로그인 이후에 만든 JWT가 잘 담겨있으나
이후에 원하는 창으로 넘어가지를 않았다.
그렇다면 원하는 화면으로 넘기고자 시도를 해야한다 !
찾아본 방법을 하나씩 적용해보기 시작했다.
WebsecurityConfiguration 클래스 내의 securityFilterChain 메소드에서 구현 가능하다.
Spring Security는 로그인 성공 이후에 사용자가 처음에 접근했던 페이지로 redirect 해주는데,
그 페이지가 아닌 다른 지정된 페이지로 redirect 할 수 있게 하는 메소드이다.
해당 사항을 적용했으나 달라지는 부분은 없었다.
httpSecurity.formLogin().defaultSuccessUrl("/");
해당 메소드는 로그인 성공 후 보내는 URL 이다.
특정 URL 호출로 다른 로직을 한 번 더 실행하게 된다.
httpSecurity.formLogin().successForwardUrl("/");
해당 메소드도 역시 내가 적어둔 대로 동작하지는 않았다.
로그인 Filter를 커스텀해서 사용했는데,
해당 로그인 Filter에서 로그인이 성공했을 경우에 동작하는 메소드가 있다.
successfulAuthentication 메소드 내부에 sendUrl을 이용하는 것이다.
httpServletResponse.sendUrl("/");
위의 코드를 추가했더니 원하는 대로 동작했다.
filter 단에서 successfulAuthentication 메소드 내부에서
sendUrl()
을 이용하여 원하는 페이지로 redirect 할 수 있다는 점을 알게 되었다.
다만 WebSecurityConfiguration 클래스 내에서 동작하는 securityFilterChain
메소드 내에서도 formLogin으로 제어가 가능한 것을 알았는데,
내 코드에서 동작하지 않았던 이유를 좀 더 찾아보면 좋을 것 같다.
참고
https://twer.tistory.com/entry/Spring-Security-defaultSuccessUrl-successForwardUrl-successHandler