트러블슈팅

Cannot call sendRedirect() after the response has been committed 해결 방법

기억용블로그 2022. 5. 19. 23:05
728x90
protected void resultRedirectStrategy(final HttpServletRequest request,
                                      final HttpServletResponse response,
                                      final Authentication authentication) throws IOException, ServletException {

    SavedRequest savedRequest = (SavedRequest) request.getSession().getAttribute("SPRING_SECURITY_SAVED_REQUEST");
    if (authentication.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMIN"))) {
        redirectStrategy.sendRedirect(request, response, "/admin");
    }
   if (savedRequest != null) {
        String targetUrl = savedRequest.getRedirectUrl();
        System.out.println("targetUrl: " + targetUrl);
        redirectStrategy.sendRedirect(request, response, targetUrl);
    } else {
        System.out.println("defaultUrl: " + defaultUrl);
        redirectStrategy.sendRedirect(request, response, defaultUrl);
    }
}

위와같이 if statement가 else로 연결되어 있지 않은 경우에 1가지 이상의 redirectStrategy가 결정되기 때문에 해당 에러가 발생한다.

 

...
redirectStrategy.sendRedirect(request, response, "/admin");
}
else if (savedRequest != null) {
    String targetUrl = savedRequest.getRedirectUrl();
...

이와 같이 if-else if-else if-else의 형태로 만들어 어떠한 경우라도 redirect 전략이 한 개가 될 수 있게 해야한다