Java/Framework & Libs
untitled Preview java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
허니몬
2016. 9. 11. 23:21
HttpServletResponse
의 sendRedirect
메서드를 사용하다가 다음과 같은 메시지가 나왔다.
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committedat javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)at org.springframework.security.web.firewall.FirewalledResponse.sendRedirect(FirewalledResponse.java:41)at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)at org.springframework.security.web.util.OnCommittedResponseWrapper.sendRedirect(OnCommittedResponseWrapper.java:128)at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:138)at org.springframework.security.web.util.OnCommittedResponseWrapper.sendRedirect(OnCommittedResponseWrapper.java:128)
이런 코드가 발생하는 경우를 찾아보면, 다음처럼 되어 있었다.
String redirectUrl = request;if(user == UserStatus.EMAIL_VERIFY) {response;}if(request || request) {response;}response;
예외 메시지를 살펴보니 sendRedirect
메서드가 호출된 이후에 재호출하려고 하면 java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
가 출력되는 것이다. 호출된 이후에는 다시 호출할 수 없다는 뜻으로 변경할 수 없다는 뜻이다.
이에 대한 해결책을 좀 찾아봤다.
이걸 해결항 수 있는 방법으로는,
String redirectUrl = request;if(user == UserStatus.EMAIL_VERIFY) {response;} else if(request || request) {response;} else {response;}
와 같은 방식으로 완전히 조건문 내에서 한번만 호출되도록 처리하거나,
String redirectUrl = request;if(user == UserStatus.EMAIL_VERIFY) {redirectUrl = URL_SIGNUP_PROGRESS;}if(request || request) {redirectUrl = URL_ROOT;}response;
위의 코드처럼 조건을 모두 마친 후에 마지막에 sendRedirect
를 호출하는 것이다. 마지막 방법이 좀 더 괜찮은 처리방법이라는 생각이…