diff options
author | Jonas Granvik <jonas@granvik.me> | 2015-01-12 12:44:34 +0200 |
---|---|---|
committer | Artur Signell <artur@vaadin.com> | 2015-01-12 18:44:36 +0000 |
commit | b412ae97a659919b928fc28a3cb6500d75d514b2 (patch) | |
tree | 3ef1ee17b26a99435a6255f1279cefe37f665735 | |
parent | e20f6fd54ae4b350ea654807b98fe442e546d1a8 (diff) | |
download | vaadin-framework-b412ae97a659919b928fc28a3cb6500d75d514b2.tar.gz vaadin-framework-b412ae97a659919b928fc28a3cb6500d75d514b2.zip |
Add option to disable sending v-loc parameter in init request (#14460).
Change-Id: Ie17e0621400c3397dc19b386974e231b6f82944c
11 files changed, 135 insertions, 3 deletions
diff --git a/WebContent/VAADIN/vaadinBootstrap.js b/WebContent/VAADIN/vaadinBootstrap.js index 53b213e110..89514dbcc2 100644 --- a/WebContent/VAADIN/vaadinBootstrap.js +++ b/WebContent/VAADIN/vaadinBootstrap.js @@ -136,7 +136,7 @@ params += extraParams; } - params += '&' + vaadin.getBrowserDetailsParameters(appId); + params += '&' + vaadin.getBrowserDetailsParameters(appId, getConfig('sendUrlsAsParameters')); var r; try { @@ -270,7 +270,7 @@ ws.pendingApps = null; } }, - getBrowserDetailsParameters: function(parentElementId) { + getBrowserDetailsParameters: function(parentElementId, sendUrlsAsParameters) { // Screen height and width var params = 'v-sh=' + window.screen.height; params += '&v-sw=' + window.screen.width; @@ -327,7 +327,9 @@ } // Location - params += '&v-loc=' + encodeURIComponent(location.href); + if (sendUrlsAsParameters !== false) { + params += '&v-loc=' + encodeURIComponent(location.href); + } // Window name if (window.name) { diff --git a/server/src/com/vaadin/server/BootstrapHandler.java b/server/src/com/vaadin/server/BootstrapHandler.java index e74f6d7c45..a9343a7e03 100644 --- a/server/src/com/vaadin/server/BootstrapHandler.java +++ b/server/src/com/vaadin/server/BootstrapHandler.java @@ -681,6 +681,12 @@ public abstract class BootstrapHandler extends SynchronizedRequestHandler { appConfig.put(ApplicationConstants.SERVICE_URL, serviceUrl); } + boolean sendUrlsAsParameters = vaadinService + .getDeploymentConfiguration().isSendUrlsAsParameters(); + if (!sendUrlsAsParameters) { + appConfig.put("sendUrlsAsParameters", false); + } + return appConfig; } diff --git a/server/src/com/vaadin/server/Constants.java b/server/src/com/vaadin/server/Constants.java index 02a992a882..8036490333 100644 --- a/server/src/com/vaadin/server/Constants.java +++ b/server/src/com/vaadin/server/Constants.java @@ -136,6 +136,7 @@ public interface Constants { static final String SERVLET_PARAMETER_UI_PROVIDER = "UIProvider"; static final String SERVLET_PARAMETER_LEGACY_PROPERTY_TOSTRING = "legacyPropertyToString"; static final String SERVLET_PARAMETER_SYNC_ID_CHECK = "syncIdCheck"; + static final String SERVLET_PARAMETER_SENDURLSASPARAMETERS = "sendUrlsAsParameters"; // Configurable parameter names static final String PARAMETER_VAADIN_RESOURCES = "Resources"; diff --git a/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java b/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java index 22d5210eaa..b26e048431 100644 --- a/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java +++ b/server/src/com/vaadin/server/DefaultDeploymentConfiguration.java @@ -59,6 +59,8 @@ public class DefaultDeploymentConfiguration extends */ public static final boolean DEFAULT_SYNC_ID_CHECK = true; + public static final boolean DEFAULT_SEND_URLS_AS_PARAMETERS = true; + private final Properties initParameters; private boolean productionMode; private boolean xsrfProtectionEnabled; @@ -69,6 +71,7 @@ public class DefaultDeploymentConfiguration extends private final Class<?> systemPropertyBaseClass; private LegacyProperyToStringMode legacyPropertyToStringMode; private boolean syncIdCheck; + private boolean sendUrlsAsParameters; /** * Create a new deployment configuration instance. @@ -93,6 +96,7 @@ public class DefaultDeploymentConfiguration extends checkPushMode(); checkLegacyPropertyToString(); checkSyncIdCheck(); + checkSendUrlsAsParameters(); } private void checkLegacyPropertyToString() { @@ -258,6 +262,16 @@ public class DefaultDeploymentConfiguration extends /** * {@inheritDoc} * <p> + * The default value is <code>true</code>. + */ + @Override + public boolean isSendUrlsAsParameters() { + return sendUrlsAsParameters; + } + + /** + * {@inheritDoc} + * <p> * The default mode is {@link PushMode#DISABLED}. */ @Override @@ -347,6 +361,13 @@ public class DefaultDeploymentConfiguration extends Boolean.toString(DEFAULT_SYNC_ID_CHECK)).equals("true"); } + private void checkSendUrlsAsParameters() { + sendUrlsAsParameters = getApplicationOrSystemProperty( + Constants.SERVLET_PARAMETER_SENDURLSASPARAMETERS, + Boolean.toString(DEFAULT_SEND_URLS_AS_PARAMETERS)).equals( + "true"); + } + private Logger getLogger() { return Logger.getLogger(getClass().getName()); } diff --git a/server/src/com/vaadin/server/DeploymentConfiguration.java b/server/src/com/vaadin/server/DeploymentConfiguration.java index 3c20518c39..968ec7c0c3 100644 --- a/server/src/com/vaadin/server/DeploymentConfiguration.java +++ b/server/src/com/vaadin/server/DeploymentConfiguration.java @@ -111,6 +111,15 @@ public interface DeploymentConfiguration extends Serializable { public int getHeartbeatInterval(); /** + * Returns whether the sending of URL's as GET and POST parameters in + * requests with content-type <code>application/x-www-form-urlencoded</code> + * is enabled or not. + * + * @return <code>false</code> if set to false or <code>true</code> otherwise + */ + public boolean isSendUrlsAsParameters(); + + /** * Returns whether a session should be closed when all its open UIs have * been idle for longer than its configured maximum inactivity time. * <p> diff --git a/server/src/com/vaadin/server/Page.java b/server/src/com/vaadin/server/Page.java index 3ddf4862b2..74d79ade50 100644 --- a/server/src/com/vaadin/server/Page.java +++ b/server/src/com/vaadin/server/Page.java @@ -939,6 +939,12 @@ public class Page implements Serializable { * @return The browser location URI. */ public URI getLocation() { + if (location == null + && !uI.getSession().getConfiguration().isSendUrlsAsParameters()) { + throw new IllegalStateException("Location is not available as the " + + Constants.SERVLET_PARAMETER_SENDURLSASPARAMETERS + + " parameter is configured as false"); + } return location; } diff --git a/server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java b/server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java index 7370bd3fac..0518bea650 100644 --- a/server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java +++ b/server/tests/src/com/vaadin/server/AbstractDeploymentConfigurationTest.java @@ -153,5 +153,10 @@ public class AbstractDeploymentConfigurationTest { return null; } + @Override + public boolean isSendUrlsAsParameters() { + return DefaultDeploymentConfiguration.DEFAULT_SEND_URLS_AS_PARAMETERS; + } + } } diff --git a/server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java b/server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java index 8eceaea53f..ddee23a9ec 100644 --- a/server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java +++ b/server/tests/src/com/vaadin/tests/util/MockDeploymentConfiguration.java @@ -21,6 +21,7 @@ public class MockDeploymentConfiguration extends private Map<String, String> applicationOrSystemProperty = new HashMap<String, String>(); private LegacyProperyToStringMode legacyPropertyToStringMode = LegacyProperyToStringMode.DISABLED; private boolean syncIdCheckEnabled = true; + private boolean sendUrlsAsParameters = true; @Override public boolean isProductionMode() { @@ -119,4 +120,9 @@ public class MockDeploymentConfiguration extends this.legacyPropertyToStringMode = legacyPropertyToStringMode; } + @Override + public boolean isSendUrlsAsParameters() { + return sendUrlsAsParameters; + } + } diff --git a/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParameters.java b/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParameters.java new file mode 100644 index 0000000000..d398ead622 --- /dev/null +++ b/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParameters.java @@ -0,0 +1,36 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.applicationservlet; + +import com.vaadin.launcher.CustomDeploymentConfiguration; +import com.vaadin.launcher.CustomDeploymentConfiguration.Conf; +import com.vaadin.server.Constants; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUIWithLog; + +@CustomDeploymentConfiguration({ @Conf(name = Constants.SERVLET_PARAMETER_SENDURLSASPARAMETERS, value = "false") }) +public class DisableSendUrlAsParameters extends AbstractTestUIWithLog { + + @Override + protected void setup(VaadinRequest request) { + try { + log("Init location: " + getPage().getLocation()); + } catch (IllegalStateException e) { + log("Init location exception: " + e.getMessage()); + } + } + +} diff --git a/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParametersTest.java b/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParametersTest.java new file mode 100644 index 0000000000..f10f281646 --- /dev/null +++ b/uitest/src/com/vaadin/tests/applicationservlet/DisableSendUrlAsParametersTest.java @@ -0,0 +1,35 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.applicationservlet; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class DisableSendUrlAsParametersTest extends SingleBrowserTest { + + @Test + public void testInitLocation() { + openTestURL(); + + String logRow = getLogRow(0); + + Assert.assertEquals( + "1. Init location exception: Location is not available as the sendUrlsAsParameters parameter is configured as false", + logRow); + } +} diff --git a/uitest/src/com/vaadin/tests/components/AbstractTestUI.java b/uitest/src/com/vaadin/tests/components/AbstractTestUI.java index 3a7d42e29c..dba055a65a 100644 --- a/uitest/src/com/vaadin/tests/components/AbstractTestUI.java +++ b/uitest/src/com/vaadin/tests/components/AbstractTestUI.java @@ -46,6 +46,11 @@ public abstract class AbstractTestUI extends UI { } protected void warnIfWidgetsetMaybeNotCompiled() { + // Can't check location if sendUrlAsParameters is disabled + if (!getSession().getConfiguration().isSendUrlsAsParameters()) { + return; + } + // Ignore if using debug mode String query = getPage().getLocation().getQuery(); if (query != null && query.matches(".*[&?]gwt\\.codesvr.*")) { |