preserve https across redirections if it was set

This commit is contained in:
Athou
2013-08-16 19:27:13 +02:00
parent 7608921684
commit a1c42f2709
2 changed files with 24 additions and 0 deletions

View File

@@ -31,6 +31,7 @@ import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Response;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.component.IRequestableComponent;
import org.apache.wicket.request.cycle.AbstractRequestCycleListener;
import org.apache.wicket.request.cycle.RequestCycle;
@@ -44,6 +45,7 @@ import com.commafeed.frontend.pages.NextUnreadRedirectPage;
import com.commafeed.frontend.pages.PasswordRecoveryCallbackPage;
import com.commafeed.frontend.pages.PasswordRecoveryPage;
import com.commafeed.frontend.pages.WelcomePage;
import com.commafeed.frontend.utils.WicketUtils;
import com.commafeed.frontend.utils.exception.DisplayExceptionPage;
@Slf4j
@@ -151,6 +153,13 @@ public class CommaFeedApplication extends AuthenticatedWebApplication {
}
}
@Override
public void restartResponseAtSignInPage() {
// preserve https if it was set
RequestCycle.get().getUrlRenderer().setBaseUrl(Url.parse(WicketUtils.getClientFullUrl()));
super.restartResponseAtSignInPage();
}
@Override
public Session newSession(Request request, Response response) {
return new CommaFeedSession(request);

View File

@@ -44,4 +44,19 @@ public class WicketUtils {
WebResponse webResponse = (WebResponse) RequestCycle.get().getResponse();
return (HttpServletResponse) webResponse.getContainerResponse();
}
/**
* like wicket's Request.getClientUrl() but returns an absolute url instead of a relative one
*/
public static String getClientFullUrl() {
HttpServletRequest request = getHttpServletRequest();
StringBuffer requestURL = request.getRequestURL();
String queryString = request.getQueryString();
if (queryString == null) {
return requestURL.toString();
} else {
return requestURL.append('?').append(queryString).toString();
}
}
}