All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vaadin.server.DefaultDeploymentConfiguration Maven / Gradle / Ivy

There is a newer version: 8.27.3
Show newest version
/*
 * Copyright (C) 2000-2024 Vaadin Ltd
 *
 * This program is available under Vaadin Commercial License and Service Terms.
 *
 * See  for the full
 * license.
 */

package com.vaadin.server;

import java.util.Locale;
import java.util.Properties;
import java.util.logging.Logger;

import com.vaadin.shared.communication.PushMode;

/**
 * The default implementation of {@link DeploymentConfiguration} based on a base
 * class for resolving system properties and a set of init parameters.
 *
 * @author Vaadin Ltd
 * @since 7.0.0
 */
public class DefaultDeploymentConfiguration
        extends AbstractDeploymentConfiguration {
    /**
     * Default value for {@link #getResourceCacheTime()} = {@value} .
     */
    public static final int DEFAULT_RESOURCE_CACHE_TIME = 3600;

    /**
     * Default value for {@link #getHeartbeatInterval()} = {@value} .
     */
    public static final int DEFAULT_HEARTBEAT_INTERVAL = 300;

    /**
     * Default value for {@link #isCloseIdleSessions()} = {@value} .
     */
    public static final boolean DEFAULT_CLOSE_IDLE_SESSIONS = false;

    /**
     * Default value for {@link #isSyncIdCheckEnabled()} = {@value} .
     *
     * @since 7.3
     */
    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;
    private int resourceCacheTime;
    private int heartbeatInterval;
    private boolean closeIdleSessions;
    private PushMode pushMode;
    private final Class systemPropertyBaseClass;
    private boolean syncIdCheck;
    private boolean sendUrlsAsParameters;

    /**
     * Create a new deployment configuration instance.
     *
     * @param systemPropertyBaseClass
     *            the class that should be used as a basis when reading system
     *            properties
     * @param initParameters
     *            the init parameters that should make up the foundation for
     *            this configuration
     */
    public DefaultDeploymentConfiguration(Class systemPropertyBaseClass,
            Properties initParameters) {
        this.initParameters = initParameters;
        this.systemPropertyBaseClass = systemPropertyBaseClass;

        checkProductionMode();
        checkXsrfProtection();
        checkResourceCacheTime();
        checkHeartbeatInterval();
        checkCloseIdleSessions();
        checkPushMode();
        checkSyncIdCheck();
        checkSendUrlsAsParameters();
    }

    @Override
    public String getApplicationOrSystemProperty(String propertyName,
            String defaultValue) {
        String val = null;

        // Try system properties
        val = getSystemProperty(propertyName);
        if (val != null) {
            return val;
        }

        // Try application properties
        val = getApplicationProperty(propertyName);
        if (val != null) {
            return val;
        }

        return defaultValue;
    }

    /**
     * Gets an system property value.
     *
     * @param parameterName
     *            the Name or the parameter.
     * @return String value or null if not found
     */
    protected String getSystemProperty(String parameterName) {

        String val = null;

        String pkgName;
        final Package pkg = systemPropertyBaseClass.getPackage();
        if (pkg != null) {
            pkgName = pkg.getName();
        } else {
            final String className = systemPropertyBaseClass.getName();
            int index = className.lastIndexOf('.');
            if (index >= 0) {
                pkgName = className.substring(0, index);
            } else {
                pkgName = null;
            }
        }

        if (pkgName == null) {
            pkgName = "";
        } else {
            pkgName += '.';
        }

        val = System.getProperty(pkgName + parameterName);
        if (val != null) {
            return val;
        }

        // Try lowercased system properties
        val = System
                .getProperty(pkgName + parameterName.toLowerCase(Locale.ROOT));
        if (val != null) {
            return val;
        }

        // Version prefixed with just "vaadin."
        val = System.getProperty("vaadin." + parameterName);
        if (val != null) {
            return val;
        }

        // Just do a raw system property fetch
        return System.getProperty(parameterName);
    }

    /**
     * Gets an application property value.
     *
     * @param parameterName
     *            the Name or the parameter.
     * @return String value or null if not found
     */
    public String getApplicationProperty(String parameterName) {

        String val = initParameters.getProperty(parameterName);
        if (val != null) {
            return val;
        }

        // Try lower case application properties for backward compatibility with
        // 3.0.2 and earlier
        val = initParameters
                .getProperty(parameterName.toLowerCase(Locale.ROOT));

        return val;
    }

    /**
     * {@inheritDoc}
     *
     * The default is false.
     */
    @Override
    public boolean isProductionMode() {
        return productionMode;
    }

    /**
     * {@inheritDoc}
     * 

* The default is true. */ @Override public boolean isXsrfProtectionEnabled() { return xsrfProtectionEnabled; } /** * {@inheritDoc} *

* The default interval is 3600 seconds (1 hour). */ @Override public int getResourceCacheTime() { return resourceCacheTime; } /** * {@inheritDoc} *

* The default interval is 300 seconds (5 minutes). */ @Override public int getHeartbeatInterval() { return heartbeatInterval; } /** * {@inheritDoc} *

* The default value is false. */ @Override public boolean isCloseIdleSessions() { return closeIdleSessions; } /** * {@inheritDoc} *

* The default value is true. */ @Override public boolean isSyncIdCheckEnabled() { return syncIdCheck; } /** * {@inheritDoc} *

* The default value is true. */ @Override public boolean isSendUrlsAsParameters() { return sendUrlsAsParameters; } /** * {@inheritDoc} *

* The default mode is {@link PushMode#DISABLED}. */ @Override public PushMode getPushMode() { return pushMode; } @Override public Properties getInitParameters() { return initParameters; } /** * Log a warning if Vaadin is not running in production mode. */ private void checkProductionMode() { productionMode = getApplicationOrSystemProperty( Constants.SERVLET_PARAMETER_PRODUCTION_MODE, "false") .equals("true"); if (!productionMode) { getLogger().warning(Constants.NOT_PRODUCTION_MODE_INFO); } } /** * Log a warning if cross-site request forgery protection is disabled. */ private void checkXsrfProtection() { xsrfProtectionEnabled = !getApplicationOrSystemProperty( Constants.SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION, "false") .equals("true"); if (!xsrfProtectionEnabled) { getLogger().warning(Constants.WARNING_XSRF_PROTECTION_DISABLED); } } /** * Log a warning if resource cache time is set but is not an integer. */ private void checkResourceCacheTime() { try { resourceCacheTime = Integer.parseInt(getApplicationOrSystemProperty( Constants.SERVLET_PARAMETER_RESOURCE_CACHE_TIME, Integer.toString(DEFAULT_RESOURCE_CACHE_TIME))); } catch (NumberFormatException e) { getLogger().warning( Constants.WARNING_RESOURCE_CACHING_TIME_NOT_NUMERIC); resourceCacheTime = DEFAULT_RESOURCE_CACHE_TIME; } } private void checkHeartbeatInterval() { try { heartbeatInterval = Integer.parseInt(getApplicationOrSystemProperty( Constants.SERVLET_PARAMETER_HEARTBEAT_INTERVAL, Integer.toString(DEFAULT_HEARTBEAT_INTERVAL))); } catch (NumberFormatException e) { getLogger() .warning(Constants.WARNING_HEARTBEAT_INTERVAL_NOT_NUMERIC); heartbeatInterval = DEFAULT_HEARTBEAT_INTERVAL; } } private void checkCloseIdleSessions() { closeIdleSessions = getApplicationOrSystemProperty( Constants.SERVLET_PARAMETER_CLOSE_IDLE_SESSIONS, Boolean.toString(DEFAULT_CLOSE_IDLE_SESSIONS)).equals("true"); } private void checkPushMode() { String mode = getApplicationOrSystemProperty( Constants.SERVLET_PARAMETER_PUSH_MODE, PushMode.DISABLED.toString()); try { pushMode = Enum.valueOf(PushMode.class, mode.toUpperCase(Locale.ROOT)); } catch (IllegalArgumentException e) { getLogger().warning(Constants.WARNING_PUSH_MODE_NOT_RECOGNIZED); pushMode = PushMode.DISABLED; } } private void checkSyncIdCheck() { syncIdCheck = getApplicationOrSystemProperty( Constants.SERVLET_PARAMETER_SYNC_ID_CHECK, 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()); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy