![JAR search and dependency download from the Maven repository](/logo.png)
org.apache.druid.server.JettyUtils Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.druid.server;
import org.apache.druid.java.util.common.logger.Logger;
import javax.annotation.Nullable;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
public class JettyUtils
{
private static final Logger log = new Logger(JettyUtils.class);
/**
* Concatenate URI parts, in a way that is useful for proxy servlets.
*
* @param base base part of the uri, like http://example.com (no trailing slash)
* @param encodedPath encoded path, like you would get from HttpServletRequest's getRequestURI
* @param encodedQueryString encoded query string, like you would get from HttpServletRequest's getQueryString
*/
public static String concatenateForRewrite(
final String base,
final String encodedPath,
@Nullable final String encodedQueryString
)
{
// Query string and path are already encoded, no need for anything fancy beyond string concatenation.
final StringBuilder url = new StringBuilder(base).append(encodedPath);
if (encodedQueryString != null) {
url.append("?").append(encodedQueryString);
}
return url.toString();
}
/**
* Returns the value of the query parameter of the given name. If not found, but there is a value corresponding to
* the parameter of the given compatiblityName it is returned instead and a warning is logged suggestion to make
* queries using the new parameter name.
*
* This method is useful for renaming query parameters (from name to compatiblityName) while preserving backward
* compatibility of the REST API.
*/
@Nullable
public static String getQueryParam(UriInfo uriInfo, String name, String compatiblityName)
{
MultivaluedMap queryParameters = uriInfo.getQueryParameters();
// Returning the first value, according to the @QueryParam spec:
// https://docs.oracle.com/javaee/7/api/javax/ws/rs/QueryParam.html:
// "If the type is not one of the collection types listed in 5 above and the query parameter is represented by
// multiple values then the first value (lexically) of the parameter is used."
String paramValue = queryParameters.getFirst(name);
if (paramValue != null) {
return paramValue;
}
String compatibilityParamValue = queryParameters.getFirst(compatiblityName);
if (compatibilityParamValue != null) {
log.warn(
"Parameter %s in %s query has been renamed to %s. Use the new parameter name.",
compatiblityName,
uriInfo.getPath(),
name
);
return compatibilityParamValue;
}
// Not found neither name nor compatiblityName
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy