로그인 후 리다이렉션의 비밀, Spring Security 6 요청 캐시(RequestCache) ①
한 번쯤은 어떤 웹 서비스에서 특정 페이지로 이동할 경우 로그인 화면으로 이동하며 인증해야 했고 로그인 인증이 완료되면 원래 요청했던 url(특정 화면 or 요청)로 이동한 경험이 있었을 것이다.
이렇게 로그인 인증 후 원래 접근하려던 URL로 리다이렉트되는 동작을 Spring Security에서는 RequestCache와 SavedRequest 을 이용하여 구현할 수 있다.
RequestCache란?
RequestCache는 스프링 시큐리티에서 사용자가 인증되지 않은 상태에서 요청한 정보를 저장하고 관리하는 인터페이스다. 이 과정에서 SavedRequest를 쿠키 혹은 세션에 저장한다.
Spring Security 6에서는 기본적으로 HTTP 매개변수 'continue'가 정의된 경우에만 캐시 된 요청에 대해 RequestCache에 저장된 요청 정보를 검색하고 가져온다.
SavedRequest란?
인증하지 않은 사용자의 여러가지 요청 정보를 저장하여 인증 성공 후 사용자를 원래 요청한 리소스로 리다이렉션 하는 데 사용되는 인터페이스이다. 구현체로는 DefaultSavedRequest 클래스가 있다.
사실 인증이 성공한 뒤에 HttpSession에 있는 DefaultSavedRequest 안에 있는 정보를 가지고 redirect 등을 하는 과정은 모든 경우에 필요한 절차는 아니므로 필요한 경우에만 구현하면 된다. 이렇게 필요할 때만 SavedRequest를 꺼내올 수 있도록 설정하는 방법은 다음과 같이 ‘customParam’을 설정함으로써 특정한 이름의 매개변수가 있는 경우에만 HttpSession에 저장된 SavedRequest를 꺼내올 수 있다. (ex: http://localhost:8080/user?customParam=Y)
해당 내용과 관련된 간단한 예제는 이후에 다루도록 하겠다.