package io.neba.core.mvc;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.view.RedirectView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Does not {@link javax.servlet.http.HttpServletResponse#encodeRedirectURL(String) encode}
* the target URL: Sling is RESTful, i.e. requests should be stateless. Also, an appended session URL
* is not part of the Sling URL spec. Lastly, sling incorrectly encodes external URLs, resulting in
* "http(s)://" to be encoded as "_http(s)_".
*
* @author Olaf Otto
*/
public class SlingRedirectView extends RedirectView {
public SlingRedirectView(String url, boolean contextRelative, boolean http10Compatible) {
super(url, contextRelative, http10Compatible);
}
@Override
protected void sendRedirect(HttpServletRequest request,
HttpServletResponse response,
String targetUrl, boolean http10Compatible) throws IOException {
if (http10Compatible) {
// Send status code 302 by default.
response.sendRedirect(targetUrl);
} else {
HttpStatus statusCode = getHttp11StatusCode(request, response, targetUrl);
response.setStatus(statusCode.value());
response.setHeader("Location", targetUrl);
}
}
}