복붙노트

[SPRING] 스프링 보안 : 초기 타겟 URL을 얻는 방법

SPRING

스프링 보안 : 초기 타겟 URL을 얻는 방법

제한된 URL에 봄 보안을 사용하고 있습니다. 동일한 페이지에서 가입 및 로그인 페이지를 제공하려고합니다.

로그인시 스프링 보안이 제한된 페이지로 전송됩니다. 그러나 가입 절차가 끝나면 제한된 페이지로 리디렉션 할 수 있도록 대상 URL을 가입 프로세스에 전달하려고합니다.

사용자가 리디렉션 된 실제 URL을 얻는 방법

어떤 아이디어?

해결법

  1. ==============================

    1.이것은 스프링 보안으로부터 URL을 얻는 방법입니다.

    이것은 스프링 보안으로부터 URL을 얻는 방법입니다.

    SavedRequest savedRequest = (SavedRequest)session.getAttribute(
        AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY);
    String requestUrl = savedRequest.getFullRequestUrl();
    
  2. ==============================

    2.스프링 보안 3.0에서는 약간의 변화가 있었기 때문에 위의 코드 조각은 더 이상 작동하지 않습니다. 그래도 트릭을 수행합니다.

    스프링 보안 3.0에서는 약간의 변화가 있었기 때문에 위의 코드 조각은 더 이상 작동하지 않습니다. 그래도 트릭을 수행합니다.

    protected String getRedirectUrl(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if(session != null) {
            SavedRequest savedRequest = (SavedRequest) session.getAttribute(WebAttributes.SAVED_REQUEST);
            if(savedRequest != null) {
                return savedRequest.getRedirectUrl();
            }
        }
    
        /* return a sane default in case data isn't there */
        return request.getContextPath() + "/";
    }
    
  3. ==============================

    3.봄 보안 4.1.4 :

    봄 보안 4.1.4 :

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {
    
        SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
        if (savedRequest != null) {
            response.sendRedirect(savedRequest.getRedirectUrl());
        }
        else{
            response.sendRedirect("some/path");
        }
    }
    
  4. from https://stackoverflow.com/questions/631217/spring-security-how-to-get-the-initial-target-url by cc-by-sa and MIT license