Browse Source

Handle session expired for UIDL requests correctly (#11705)

Change-Id: I497e3b96387d16d9cb31fa9fce6daf0650af458e
tags/7.1.0.beta1
Artur Signell 11 years ago
parent
commit
4738e1f5a4

+ 4
- 4
server/src/com/vaadin/server/VaadinService.java View File

@@ -1392,7 +1392,7 @@ public abstract class VaadinService implements Serializable {
* @throws IOException
* If an error occured while writing the response
*/
protected void writeStringResponse(VaadinResponse response,
public void writeStringResponse(VaadinResponse response,
String contentType, String reponseString) throws IOException {

response.setContentType(contentType);
@@ -1418,9 +1418,6 @@ public abstract class VaadinService implements Serializable {
*/
protected void handleSessionExpired(VaadinRequest request,
VaadinResponse response) throws ServiceException {
SystemMessages systemMessages = getSystemMessages(
ServletPortletHelper.findLocale(null, null, request), request);

for (RequestHandler handler : getRequestHandlers()) {
if (handler instanceof SessionExpiredHandler) {
try {
@@ -1439,6 +1436,9 @@ public abstract class VaadinService implements Serializable {

try {
// If there is a URL, try to redirect there
SystemMessages systemMessages = getSystemMessages(
ServletPortletHelper.findLocale(null, null, request),
request);
String sessionExpiredURL = systemMessages.getSessionExpiredURL();
if (sessionExpiredURL != null
&& (response instanceof VaadinServletResponse)) {

+ 31
- 1
server/src/com/vaadin/server/communication/UidlRequestHandler.java View File

@@ -30,12 +30,15 @@ import com.vaadin.server.Constants;
import com.vaadin.server.LegacyCommunicationManager;
import com.vaadin.server.LegacyCommunicationManager.InvalidUIDLSecurityKeyException;
import com.vaadin.server.ServletPortletHelper;
import com.vaadin.server.SessionExpiredHandler;
import com.vaadin.server.SynchronizedRequestHandler;
import com.vaadin.server.SystemMessages;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinResponse;
import com.vaadin.server.VaadinService;
import com.vaadin.server.VaadinSession;
import com.vaadin.shared.ApplicationConstants;
import com.vaadin.shared.JsonConstants;
import com.vaadin.shared.Version;
import com.vaadin.ui.Component;
import com.vaadin.ui.UI;
@@ -50,7 +53,8 @@ import com.vaadin.ui.UI;
* @author Vaadin Ltd
* @since 7.1
*/
public class UidlRequestHandler extends SynchronizedRequestHandler {
public class UidlRequestHandler extends SynchronizedRequestHandler implements
SessionExpiredHandler {

public static final String UIDL_PATH = "UIDL/";

@@ -254,4 +258,30 @@ public class UidlRequestHandler extends SynchronizedRequestHandler {
private static final Logger getLogger() {
return Logger.getLogger(UidlRequestHandler.class.getName());
}

/*
* (non-Javadoc)
*
* @see
* com.vaadin.server.SessionExpiredHandler#handleSessionExpired(com.vaadin
* .server.VaadinRequest, com.vaadin.server.VaadinResponse)
*/
@Override
public boolean handleSessionExpired(VaadinRequest request,
VaadinResponse response) throws IOException {
if (!ServletPortletHelper.isUIDLRequest(request)) {
return false;
}
VaadinService service = request.getService();
SystemMessages systemMessages = service.getSystemMessages(
ServletPortletHelper.findLocale(null, null, request), request);

service.writeStringResponse(response, JsonConstants.JSON_CONTENT_TYPE,
VaadinService.createCriticalNotificationJSON(
systemMessages.getSessionExpiredCaption(),
systemMessages.getSessionExpiredMessage(), null,
systemMessages.getSessionExpiredURL()));

return true;
}
}

Loading…
Cancel
Save