24.05.23 16:28 작성
·
182
·
수정됨
0
안녕하세요. 강사님.
강의 외적인 내용이지만, 질문 좀 드리겠습니다.
JWT로 로그인하는 스프링 서버를 만들었는데요.
클라우드에 올린 서버가 포스트맨의 POST 형식의 로그인 요청을 수행한 뒤, 동일한 url의 GET 요청으로 Redirect 되는 현상을 발견했습니다.
스프링 서버를 로컬에서 띄우는 경우에는 발생하지 않습니다.
강의를 전부 듣지는 않았지만, FormLogin, HttpBasic를 모두 비활성화해도 로그인 이후에 Redirect가 발생하나요? Redirect를 안하고 싶은 경우는, 어떻게 설정하면 될까요?
JwtFilter의 doFilter 로직에 AuthenticationSuccessHandler 구현체를 만들어서 처리하면 되는 것까지 확인했습니다.
답변 2
0
2024. 05. 26. 22:10
리다이렉트 된다는 의미는 명시적으로 리다이렉트 코드가 존재하거나 그렇지 않으면 인증이나 인가 문제로 인한 강제 이동일 수 있습니다.
로컬에서는 되는데 클라우드에서 문제가 생기는 것이라면 어떤 환경설정이나 실행환경을 확인해 봐야 할 수 있습니다.
기본적으로 폼로그인이나 기본인증은 인증을 완료하고 나면 / 경로로 이동합니다.
인증 이후 별도의 리다이렉트 코드를 작성하지 않았다면 다른 원인을 찾아봐야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
FormLogin과 HttpBasic을 비활성화한다고 해서 로그인 이후에 리다이렉트가 발생하지 않는 것은 아닙니다. 스프링 시큐리티는 별도의 리다이렉트 설정이 없으면 기본적인 보안 흐름을 따르기 때문에, 로그인 성공 후 특정 행동(예: 리다이렉트)을 커스텀하고 싶은 경우에는 명시적인 설정이 필요합니다.
JWT를 사용하는 경우, AuthenticationSuccessHandler
구현체를 만들어서 성공적인 인증 후의 로직을 직접 정의하신 것처럼, 로그인 성공 후 리다이렉트를 하지 않으려면 성공 핸들러에서 리다이렉트 로직을 제외시키거나 원하는 응답을 반환하도록 구현해야 합니다.
로컬 환경과 클라우드 환경에서의 리다이렉트 차이는 여러 요인에 의해 발생할 수 있습니다. 예를 들어, 클라우드 환경에서의 추가적인 보안 설정, 리버스 프록시나 로드 밸런서 등의 네트워크 구성 요소들이 요청과 응답 과정에 영향을 줄 수 있습니다.
Redirect를 원치 않는 경우, AuthenticationSuccessHandler
에서 HttpServletResponse
객체를 사용하여 직접 응답을 제어할 수 있습니다. 예를 들어, HttpServletResponse.sendRedirect()
를 호출하지 않고, response.getWriter().print()
와 response.getWriter().flush()
를 사용하여 원하는 성공 메시지나 JWT 토큰을 JSON 형태 등으로 클라이언트에 전달할 수 있습니다.
클라우드 환경과 로컬 환경에서의 동작 차이를 해결하기 위해서는 클라우드 환경의 네트워크 설정 및 보안 설정도 함께 검토해보시기 바랍니다.