From ac48e130395ef245e02e720c2b49ee332f03ffbe Mon Sep 17 00:00:00 2001 From: Alexander Skoblikov Date: Wed, 27 Aug 2025 13:20:18 +0300 Subject: [PATCH] dbeaver/pro#6703 use local host address by default (#3695) * dbeaver/pro#6703 use local host address by default * dbeaver/pro#6703 rename method --------- Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com> --- .../io/cloudbeaver/utils/ServletAppUtils.java | 2 +- .../io/cloudbeaver/server/CBApplication.java | 12 +--------- .../CBServerConfigurationController.java | 23 ++++++++++++------- .../server/jetty/RequestHostFilter.java | 2 +- .../service/admin/impl/WebServiceAdmin.java | 4 ++-- .../service/auth/impl/WebServiceAuthImpl.java | 6 ++--- 6 files changed, 23 insertions(+), 26 deletions(-) diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/ServletAppUtils.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/ServletAppUtils.java index dcc03f28a4..1e528d36da 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/ServletAppUtils.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/ServletAppUtils.java @@ -292,7 +292,7 @@ public class ServletAppUtils { } @NotNull - public static String getOriginFromRequestOrThrow(HttpServletRequest request) throws DBWebException { + public static String getOriginFromRequest(@NotNull HttpServletRequest request) { String origin = request.getHeader(HEADER_ORIGIN); if (CommonUtils.isEmpty(origin)) { origin = request.getHeader(HEADER_X_ORIGIN); diff --git a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBApplication.java b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBApplication.java index f0ceaa3492..62be954fbd 100644 --- a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBApplication.java +++ b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBApplication.java @@ -103,7 +103,6 @@ public abstract class CBApplication // Persistence protected SMAdminController securityController; private boolean configurationMode = false; - private String localHostAddress; protected String containerId; private final List localInetAddresses = new ArrayList<>(); @@ -226,15 +225,6 @@ public abstract class CBApplication eventController.setForceSkipEvents(isConfigurationMode()); // do not send events if configuration mode is on - // Determine address for local host - localHostAddress = System.getenv(CBConstants.VAR_CB_LOCAL_HOST_ADDR); - if (CommonUtils.isEmpty(localHostAddress)) { - localHostAddress = System.getProperty(CBConstants.VAR_CB_LOCAL_HOST_ADDR); - } - if (CommonUtils.isEmpty(localHostAddress) || CBConstants.HOST_127_0_0_1.equals(localHostAddress) || "::0".equals( - localHostAddress)) { - localHostAddress = CBConstants.HOST_LOCALHOST; - } Location instanceLoc = Platform.getInstanceLocation(); try { @@ -529,7 +519,7 @@ public abstract class CBApplication } public String getLocalHostAddress() { - return localHostAddress; + return getServerConfigurationController().getLocalHostAddress(); } public List getLocalInetAddresses() { diff --git a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBServerConfigurationController.java b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBServerConfigurationController.java index 3a455fe66b..338680eff3 100644 --- a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBServerConfigurationController.java +++ b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/CBServerConfigurationController.java @@ -44,8 +44,6 @@ import org.jkiss.utils.CommonUtils; import org.jkiss.utils.IOUtils; import java.io.*; -import java.net.InetAddress; -import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -66,6 +64,7 @@ public abstract class CBServerConfigurationController protected final Path homeDirectory; private final Map externalProperties = new LinkedHashMap<>(); private final Map originalConfigurationProperties = new LinkedHashMap<>(); + private String localHostAddress; protected CBServerConfigurationController(@NotNull T serverConfiguration, @NotNull Path homeDirectory) { super(homeDirectory); @@ -80,6 +79,15 @@ public abstract class CBServerConfigurationController @Override public void loadServerConfiguration(Path configPath) throws DBException { log.debug("Using configuration [" + configPath + "]"); + // Determine address for local host + localHostAddress = System.getenv(CBConstants.VAR_CB_LOCAL_HOST_ADDR); + if (CommonUtils.isEmpty(localHostAddress)) { + localHostAddress = System.getProperty(CBConstants.VAR_CB_LOCAL_HOST_ADDR); + } + if (CommonUtils.isEmpty(localHostAddress) || CBConstants.HOST_127_0_0_1.equals(localHostAddress) || "::0".equals( + localHostAddress)) { + localHostAddress = CBConstants.HOST_LOCALHOST; + } if (!Files.exists(configPath)) { log.error("Configuration file " + configPath + " doesn't exist. Use defaults."); @@ -162,12 +170,7 @@ public abstract class CBServerConfigurationController if (config.getServerURL() == null) { String hostName = config.getServerHost(); if (CommonUtils.isEmpty(hostName)) { - try { - hostName = InetAddress.getLocalHost().getHostName(); - } catch (UnknownHostException e) { - log.debug("Error resolving localhost address: " + e.getMessage()); - hostName = CBConstants.HOST_LOCALHOST; - } + hostName = getLocalHostAddress(); } config.setServerURL("http://" + hostName + ":" + config.getServerPort()); } @@ -669,4 +672,8 @@ public abstract class CBServerConfigurationController public void validateFinalServerConfiguration() throws DBException { } + + public String getLocalHostAddress() { + return localHostAddress; + } } \ No newline at end of file diff --git a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/jetty/RequestHostFilter.java b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/jetty/RequestHostFilter.java index 2666a3f76d..abdcb13a8c 100644 --- a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/jetty/RequestHostFilter.java +++ b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/jetty/RequestHostFilter.java @@ -67,7 +67,7 @@ public class RequestHostFilter implements Filter { CBServerConfig serverConfig = application.getServerConfiguration(); URI originUri; try { - String origin = ServletAppUtils.getOriginFromRequestOrThrow(httpRequest); + String origin = ServletAppUtils.getOriginFromRequest(httpRequest); originUri = URI.create(origin); } catch (Exception e) { log.error("Failed to get origin from request", e); diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java index afff09478b..26830b6d2a 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java @@ -494,7 +494,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { @NotNull WebSession webSession, @Nullable String providerId ) throws DBWebException { - String origin = ServletAppUtils.getOriginFromRequestOrThrow(request); + String origin = ServletAppUtils.getOriginFromRequest(request); List result = new ArrayList<>(); for (SMAuthProviderCustomConfiguration cfg : CBApplication.getInstance().getAppConfiguration().getAuthCustomConfigurations()) { if (providerId != null && !providerId.equals(cfg.getProvider())) { @@ -544,7 +544,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { providerConfig.getProvider(), webSession.getUserId() )); - return new WebAuthProviderConfiguration(authProvider, providerConfig, ServletAppUtils.getOriginFromRequestOrThrow(request)); + return new WebAuthProviderConfiguration(authProvider, providerConfig, ServletAppUtils.getOriginFromRequest(request)); } @Override diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java index 15d913b841..fb39b495c4 100644 --- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java @@ -111,7 +111,7 @@ public class WebServiceAuthImpl implements DBWServiceAuth { } try { Map authParameters = new HashMap<>(); - authParameters.put(SMConstants.USER_ORIGIN, ServletAppUtils.getOriginFromRequestOrThrow(httpRequest)); + authParameters.put(SMConstants.USER_ORIGIN, ServletAppUtils.getOriginFromRequest(httpRequest)); var smAuthInfo = initiateAuthentication(webSession, providerId, providerConfigurationId, authParameters, forceSessionsLogout); if (smAuthInfo.getAuthStatus() != SMAuthStatus.IN_PROGRESS) { @@ -227,7 +227,7 @@ public class WebServiceAuthImpl implements DBWServiceAuth { List removedInfos = webSession.removeAuthInfo(providerId); List logoutUrls = new ArrayList<>(); var cbApp = CBApplication.getInstance(); - String origin = ServletAppUtils.getOriginFromRequestOrThrow(httpRequest); + String origin = ServletAppUtils.getOriginFromRequest(httpRequest); for (WebAuthInfo removedInfo : removedInfos) { if (removedInfo.getAuthProviderDescriptor() .getInstance() instanceof SMSignOutLinkProvider provider @@ -297,7 +297,7 @@ public class WebServiceAuthImpl implements DBWServiceAuth { @Override public WebAuthProviderInfo[] getAuthProviders(@NotNull HttpServletRequest request) throws DBWebException { - String origin = ServletAppUtils.getOriginFromRequestOrThrow(request); + String origin = ServletAppUtils.getOriginFromRequest(request); return WebAuthProviderRegistry.getInstance().getAuthProviders() .stream() .map(descriptor -> new WebAuthProviderInfo(descriptor, origin))