You are viewing a plain text version of this content. The canonical link for it is here.
Posted to portalapps-dev@portals.apache.org by wo...@apache.org on 2013/07/08 15:56:35 UTC
svn commit: r1500734 -
/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java
Author: woonsan
Date: Mon Jul 8 13:56:34 2013
New Revision: 1500734
URL: http://svn.apache.org/r1500734
Log:
APA-53: Applying Jeroen van Dun's patch to fix the case when redirect location is a relative path, not an absolute URI, with polishing the patch (e.g, not using httpclient 3.x dependency (we're using apache-hc 4.x)).
Modified:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java
Modified: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java?rev=1500734&r1=1500733&r2=1500734&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java (original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java Mon Jul 8 13:56:34 2013
@@ -5,9 +5,9 @@
* 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.
@@ -23,6 +23,7 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
@@ -95,131 +96,131 @@ import org.slf4j.LoggerFactory;
/**
* HTTP Reverse Proxy Service Implementation
- *
+ *
* @version $Id$
*/
public class RewritableHttpReverseProxyServiceImpl implements HttpReverseProxyService
{
-
+
private static Logger log = LoggerFactory.getLogger(RewritableHttpReverseProxyServiceImpl.class);
-
+
/**
* Proxy path mapper provider
*/
private HttpReverseProxyPathMapperProvider proxyPathMapperProvider;
-
+
/**
* Default reverse proxy request context
*/
private ReverseProxyRequestContextProvider defaultReverseProxyRequestContextProvider;
-
+
/**
* Forced host header value
*/
private String hostHeaderValue;
-
+
/**
* forced local base url. e.g., "/webcontent/rproxy".
*/
private String localBaseURL;
-
+
/**
* SchemeRegistry
*/
private SchemeRegistry schemeRegistry;
-
+
/**
* The multithreaded connection manager for performance.
*/
private ClientConnectionManager connectionManager;
-
+
/**
* HTTP Connection Manager Parameters
*/
private HttpParams connectionManagerParams;
-
+
/**
* HTTP Client Parameters
*/
private HttpParams clientParams;
-
+
/**
* HTTP Route Planner
*/
private HttpRoutePlanner httpRoutePlanner;
-
+
/**
* URI Cleaner used to clean remote URIs before invoking HTTP Methods.
*/
private URICleaner defaultURICleaner;
-
+
public RewritableHttpReverseProxyServiceImpl(HttpReverseProxyPathMapperProvider proxyPathMapperProvider, ReverseProxyRequestContextProvider defaultReverseProxyRequestContextProvider)
{
this.proxyPathMapperProvider = proxyPathMapperProvider;
-
+
if (defaultReverseProxyRequestContextProvider != null)
{
this.defaultReverseProxyRequestContextProvider = defaultReverseProxyRequestContextProvider;
}
}
-
+
public void setHostHeaderValue(String hostHeaderValue)
{
this.hostHeaderValue = hostHeaderValue;
}
-
+
public void setLocalBaseURL(String localBaseURL)
{
this.localBaseURL = localBaseURL;
}
-
+
public void setClientParams(HttpParams clientParams)
{
this.clientParams = clientParams;
}
-
+
public void setSchemeRegistry(SchemeRegistry schemeRegistry)
{
this.schemeRegistry = schemeRegistry;
}
-
+
public void setConnectionManagerParams(HttpParams connectionManagerParams)
{
this.connectionManagerParams = connectionManagerParams;
}
-
+
public void setHttpRoutePlanner(HttpRoutePlanner httpRoutePlanner)
{
this.httpRoutePlanner = httpRoutePlanner;
}
-
+
public void setDefaultURICleaner(URICleaner defaultURICleaner)
{
this.defaultURICleaner = defaultURICleaner;
}
-
+
public void initialize()
{
if (clientParams == null)
{
clientParams = new BasicHttpParams();
}
-
+
if (connectionManagerParams == null)
{
connectionManagerParams = new BasicHttpParams();
}
-
+
if (schemeRegistry == null)
{
schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
}
-
+
connectionManager = new ThreadSafeClientConnManager(connectionManagerParams, schemeRegistry);
}
-
+
public void destroy()
{
if (connectionManager != null)
@@ -227,38 +228,38 @@ public class RewritableHttpReverseProxyS
connectionManager.shutdown();
}
}
-
+
public void invoke(HttpServletRequest request, HttpServletResponse response) throws HttpReverseProxyException, IOException
{
// proxyPathMapper can be injected by using request attribute.
HttpReverseProxyPathMapper proxyPathMapper = (HttpReverseProxyPathMapper) request.getAttribute(HttpReverseProxyConstants.PATH_MAPPER);
-
+
String localPathInfo = request.getPathInfo();
-
+
if (localPathInfo.indexOf('/', 1) == -1)
{
localPathInfo = localPathInfo + "/";
}
-
+
if (proxyPathMapper == null)
{
proxyPathMapper = proxyPathMapperProvider.findMapper(localPathInfo);
}
-
+
if (proxyPathMapper == null)
{
throw new HttpReverseProxyNotFoundException("Proxy configuration is not defined for " + localPathInfo);
}
-
+
if (proxyPathMapper.isSecured())
{
boolean allowed = false;
Set<String> allowedRoles = proxyPathMapper.getAllowedRoles();
-
+
if (allowedRoles != null)
{
ReverseProxyRequestContextProvider reverseProxyRequestContextProvider = findReverseProxyRequestContextProvider(request);
-
+
for (String allowedRole : allowedRoles)
{
if (reverseProxyRequestContextProvider.isUserInRole(request, allowedRole))
@@ -268,7 +269,7 @@ public class RewritableHttpReverseProxyS
}
}
}
-
+
if (!allowed)
{
log.warn("The user is not in roles: " + allowedRoles);
@@ -276,7 +277,7 @@ public class RewritableHttpReverseProxyS
return;
}
}
-
+
if (hostHeaderValue == null)
{
if (request.getServerPort() == 80)
@@ -288,16 +289,16 @@ public class RewritableHttpReverseProxyS
hostHeaderValue = request.getServerName() + ":" + request.getServerPort();
}
}
-
+
String proxyTargetURL = proxyPathMapper.getRemoteURL(localPathInfo);
-
+
if (proxyTargetURL == null)
{
throw new HttpReverseProxyNotFoundException("Cannot translate the location path info into remote URL. " + localPathInfo);
}
-
+
String queryString = request.getQueryString();
-
+
if (queryString != null)
{
proxyTargetURL = new StringBuilder(proxyTargetURL.length() + 1 + queryString.length()).append(proxyTargetURL).append('?').append(queryString).toString();
@@ -305,41 +306,41 @@ public class RewritableHttpReverseProxyS
final List<org.apache.http.cookie.Cookie> responseSetCookies = new ArrayList<org.apache.http.cookie.Cookie>();
// create http client for each request...
- DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager, clientParams)
+ DefaultHttpClient httpClient = new DefaultHttpClient(connectionManager, clientParams)
{
@Override
- protected CookieStore createCookieStore()
+ protected CookieStore createCookieStore()
{
- return new BasicCookieStore()
+ return new BasicCookieStore()
{
@Override
- public void addCookie(org.apache.http.cookie.Cookie cookie)
+ public void addCookie(org.apache.http.cookie.Cookie cookie)
{
responseSetCookies.add(cookie);
}
};
}
};
-
+
if (httpRoutePlanner != null)
{
httpClient.setRoutePlanner(httpRoutePlanner);
}
-
+
// redirection should be adjusted with local host header...
httpClient.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, false);
-
+
HttpRequestBase httpRequest = null;
-
+
String method = request.getMethod();
-
+
// Before invoking HTTP Methods, let's clean the remote target URI
// in order to avoid invalid URI exception (e.g. space in the URI)
- if (defaultURICleaner != null)
+ if (defaultURICleaner != null)
{
proxyTargetURL = defaultURICleaner.clean(proxyTargetURL);
}
-
+
if (HttpGet.METHOD_NAME.equals(method))
{
httpRequest = new HttpGet(proxyTargetURL);
@@ -352,7 +353,7 @@ public class RewritableHttpReverseProxyS
{
httpRequest = new HttpPost(proxyTargetURL);
long contentLength = NumberUtils.toLong(request.getHeader(HTTP.CONTENT_LEN));
-
+
if (contentLength > 0L)
{
HttpEntity entity = new InputStreamEntity(request.getInputStream(), contentLength);
@@ -362,9 +363,9 @@ public class RewritableHttpReverseProxyS
else if (HttpPut.METHOD_NAME.equals(method))
{
httpRequest = new HttpPut(proxyTargetURL);
-
+
long contentLength = NumberUtils.toLong(request.getHeader(HTTP.CONTENT_LEN));
-
+
if (contentLength > 0L)
{
HttpEntity entity = new InputStreamEntity(request.getInputStream(), contentLength);
@@ -387,13 +388,13 @@ public class RewritableHttpReverseProxyS
{
throw new HttpReverseProxyException("Unsupported method: " + method);
}
-
+
// set sso credentials if available
List<SSOSiteCredentials> credsList = getSSOSiteCredentials(proxyTargetURL, httpClient, request);
if (credsList != null && !credsList.isEmpty())
{
SSOSiteCredentials firstCreds = credsList.get(0);
-
+
if (firstCreds.isFormAuthentication() && StringUtils.equals(firstCreds.getBaseURL(), proxyTargetURL))
{
httpRequest = new HttpPost(proxyTargetURL);
@@ -412,27 +413,27 @@ public class RewritableHttpReverseProxyS
}
}
}
-
+
// pass most headers to proxy target...
- for (Enumeration enumHeaderNames = request.getHeaderNames(); enumHeaderNames.hasMoreElements(); )
+ for (Enumeration enumHeaderNames = request.getHeaderNames(); enumHeaderNames.hasMoreElements(); )
{
String headerName = (String) enumHeaderNames.nextElement();
-
+
if (StringUtils.equalsIgnoreCase(headerName, HTTP.CONTENT_LEN))
continue;
-
+
if (StringUtils.equalsIgnoreCase(headerName, HTTP.TARGET_HOST))
continue;
-
+
for (Enumeration enumHeaderValues = request.getHeaders(headerName); enumHeaderValues.hasMoreElements(); )
{
String headerValue = (String) enumHeaderValues.nextElement();
httpRequest.addHeader(headerName, headerValue);
}
}
-
+
Map<String, String> defaultRequestHeaders = proxyPathMapper.getDefaultRequestHeaders();
-
+
if (defaultRequestHeaders != null)
{
for (Map.Entry<String, String> entry : defaultRequestHeaders.entrySet())
@@ -440,13 +441,13 @@ public class RewritableHttpReverseProxyS
httpRequest.setHeader(entry.getKey(), entry.getValue());
}
}
-
+
CookieStore cookieStore = httpClient.getCookieStore();
-
+
if (cookieStore != null)
{
Map<String, String> defaultRequestCookies = proxyPathMapper.getDefaultRequestCookies();
-
+
if (defaultRequestCookies != null)
{
for (Map.Entry<String, String> entry : defaultRequestCookies.entrySet())
@@ -455,79 +456,94 @@ public class RewritableHttpReverseProxyS
}
}
}
-
+
HttpEntity httpEntity = null;
-
+
try
{
HttpResponse httpResponse = httpClient.execute(httpRequest);
httpEntity = httpResponse.getEntity();
-
+
String rewriterContextPath = localBaseURL;
-
- if (rewriterContextPath == null)
+
+ if (rewriterContextPath == null)
{
rewriterContextPath = request.getContextPath() + request.getServletPath();
}
-
+
int statusCode = httpResponse.getStatusLine().getStatusCode();
-
+
// Check if the proxy response is a redirect
if (statusCode >= HttpServletResponse.SC_MULTIPLE_CHOICES /* 300 */
&& statusCode < HttpServletResponse.SC_NOT_MODIFIED /* 304 */)
{
String location = null;
Header locationHeader = httpResponse.getFirstHeader(HttpReverseProxyConstants.HTTP_HEADER_LOCATION);
-
+
if (locationHeader != null)
{
location = locationHeader.getValue();
}
-
+
if (location == null)
{
throw new HttpReverseProxyException("Recieved status code is " + statusCode + " but no " + HttpReverseProxyConstants.HTTP_HEADER_LOCATION + " header was found in the response");
}
-
+
+ // According to rfc2616, "Location" header value must be an absolute URI.
+ // However, in case it is not, prepend the host URI of the proxy target URL.
+ if (location.startsWith("/")) {
+ URI targetURI = new URI(proxyTargetURL);
+ String scheme = targetURI.getScheme();
+ int port = targetURI.getPort();
+ StringBuilder uriBuilder = new StringBuilder(40).append(targetURI.getScheme()).append("://").append(targetURI.getHost());
+
+ if (port > 0 && ((port != 80 && "http".equals(scheme)) || (port != 443 && "https".equals(scheme)))) {
+ uriBuilder.append(':').append(port);
+ }
+
+ uriBuilder.append(location);
+ location = uriBuilder.toString();
+ }
+
// Modify the redirect to go to this proxy servlet rather that the proxied host
- // FYI, according to rfc2616, "Location" header value must be an absolute URI.
String localPath = proxyPathMapper.getLocalPath(location);
-
+
// if the current proxy path mapper cannot map the remote location to local path, then
// try to find out a possible path mapper instead one more...
if (localPath == null)
{
HttpReverseProxyPathMapper proxyPathMapperByLocation = proxyPathMapperProvider.findMapperByRemoteURL(location);
-
+
if (proxyPathMapperByLocation != null)
{
localPath = proxyPathMapperByLocation.getLocalPath(location);
}
}
-
+
String redirectLocation = null;
-
+
if (localPath == null)
{
if (log.isWarnEnabled())
{
log.warn("Cannot translate the redirect location to local path. {}", location);
}
-
+
redirectLocation = location;
}
else
{
redirectLocation = rewriterContextPath + localPath;
}
-
+
if (!responseSetCookies.isEmpty())
{
addResponseCookies(request, response, responseSetCookies, proxyPathMapper, rewriterContextPath);
}
-
+
response.sendRedirect(redirectLocation);
-
+
return;
}
else if (statusCode == HttpServletResponse.SC_NOT_MODIFIED)
@@ -540,53 +556,53 @@ public class RewritableHttpReverseProxyS
// body because the file has not changed.
response.setIntHeader(HTTP.CONTENT_LEN, 0);
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-
+
if (!responseSetCookies.isEmpty())
{
addResponseCookies(request, response, responseSetCookies, proxyPathMapper, rewriterContextPath);
}
-
+
return;
}
else
{
// Pass the response code back to the client
response.setStatus(statusCode);
-
+
if (httpEntity != null)
{
boolean rewritable = false;
Rewriter rewriter = null;
ParserAdaptor parserAdaptor = null;
-
+
RewriterController rewriterController = proxyPathMapperProvider.getRewriterController(proxyPathMapper);
-
+
if (rewriterController != null)
{
parserAdaptor = createParserAdaptor(rewriterController, httpEntity);
-
+
if (parserAdaptor != null)
{
rewriter = createRewriter(rewriterController, proxyPathMapper);
rewritable = (rewriter != null);
}
}
-
+
// Pass response headers back to the client
Header [] headerArrayResponse = httpResponse.getAllHeaders();
-
+
for (Header header : headerArrayResponse)
{
String headerName = header.getName();
-
+
if (rewritable && StringUtils.equalsIgnoreCase(headerName, HTTP.CONTENT_LEN))
continue;
-
+
if (StringUtils.startsWithIgnoreCase(headerName, "Set-Cookie"))
continue;
-
+
String headerValue = header.getValue();
-
+
if (StringUtils.equalsIgnoreCase(headerName, HTTP.TARGET_HOST))
{
response.setHeader(headerName, hostHeaderValue);
@@ -596,12 +612,12 @@ public class RewritableHttpReverseProxyS
response.setHeader(headerName, headerValue);
}
}
-
+
if (!responseSetCookies.isEmpty())
{
addResponseCookies(request, response, responseSetCookies, proxyPathMapper, rewriterContextPath);
}
-
+
// Send the content to the client
writeHttpEntityToClient(response, httpEntity, proxyPathMapper, rewriterContextPath, localPathInfo, rewriter, parserAdaptor);
}
@@ -617,10 +633,10 @@ public class RewritableHttpReverseProxyS
{
log.error("IOException occurred during execution for {} {}", proxyTargetURL, e);
}
-
+
httpRequest.abort();
httpEntity = null;
-
+
throw e;
}
catch (Exception e)
@@ -633,10 +649,10 @@ public class RewritableHttpReverseProxyS
{
log.error("Exception occurred during execution for {} {}", proxyTargetURL, e);
}
-
+
httpRequest.abort();
httpEntity = null;
-
+
throw new HttpReverseProxyException(e);
}
finally
@@ -647,7 +663,7 @@ public class RewritableHttpReverseProxyS
}
}
}
-
+
private void addResponseCookies(HttpServletRequest request, HttpServletResponse response, List<org.apache.http.cookie.Cookie> responseSetCookies, HttpReverseProxyPathMapper proxyPathMapper, String rewriterContextPath)
{
boolean isSecureRequest = request.isSecure();
@@ -656,9 +672,9 @@ public class RewritableHttpReverseProxyS
boolean includesEmpty = (includes == null || includes.isEmpty());
boolean excludesEmpty = (excludes == null || excludes.isEmpty());
boolean allEmpty = (includesEmpty && excludesEmpty);
-
+
String rewrittenCookiePath = rewriterContextPath + proxyPathMapper.getLocalBasePath();
-
+
for (org.apache.http.cookie.Cookie cookie : responseSetCookies)
{
String cookieName = cookie.getName();
@@ -666,28 +682,28 @@ public class RewritableHttpReverseProxyS
responseCookie.setVersion(cookie.getVersion());
responseCookie.setComment(cookie.getComment());
Date expireDate = cookie.getExpiryDate();
-
+
if (expireDate != null)
{
int maxAgeSeconds = (int) ((expireDate.getTime() - System.currentTimeMillis()) / 1000L);
responseCookie.setMaxAge(maxAgeSeconds);
}
-
+
responseCookie.setSecure(isSecureRequest && cookie.isSecure());
responseCookie.setVersion(cookie.getVersion());
-
+
if ((allEmpty) || (!includesEmpty && includes.contains(cookieName)) || (!excludesEmpty && !excludes.contains(cookieName)))
{
responseCookie.setPath(rewrittenCookiePath);
}
-
+
response.addCookie(responseCookie);
}
}
- private void writeHttpEntityToClient(HttpServletResponse response,
- HttpEntity httpEntity,
- HttpReverseProxyPathMapper proxyPathMapper,
+ private void writeHttpEntityToClient(HttpServletResponse response,
+ HttpEntity httpEntity,
+ HttpReverseProxyPathMapper proxyPathMapper,
String rewriterContextPath,
String localPathInfo,
Rewriter rewriter,
@@ -697,17 +713,17 @@ public class RewritableHttpReverseProxyS
Reader reader = null;
OutputStream out = null;
Writer writer = null;
-
- try
+
+ try
{
in = httpEntity.getContent();
-
+
// According to javadoc of httpclient, getResponseBodyAsStream() can return null
// if the response has no body.
if (in != null)
{
out = response.getOutputStream();
-
+
if (rewriter == null || parserAdaptor == null)
{
IOUtils.copy(in, out);
@@ -717,21 +733,21 @@ public class RewritableHttpReverseProxyS
{
boolean gzipEncoded = false;
Header contentEncodingHeader = httpEntity.getContentEncoding();
-
+
if (contentEncodingHeader != null)
{
gzipEncoded = StringUtils.equalsIgnoreCase("gzip", contentEncodingHeader.getValue());
}
-
+
if (parserAdaptor instanceof ReverseProxyRewritingContextAware)
{
- ReverseProxyRewritingContext rewritingContext =
+ ReverseProxyRewritingContext rewritingContext =
new DefaultReverseProxyRewritingContext(proxyPathMapper, proxyPathMapperProvider, rewriterContextPath);
((ReverseProxyRewritingContextAware) parserAdaptor).setReverseProxyRewritingContext(rewritingContext);
}
-
+
String responseCharSet = EntityUtils.getContentCharSet(httpEntity);
-
+
if (responseCharSet != null)
{
reader = new InputStreamReader(gzipEncoded ? new GZIPInputStream(in) : in, responseCharSet);
@@ -742,7 +758,7 @@ public class RewritableHttpReverseProxyS
reader = new InputStreamReader(gzipEncoded ? new GZIPInputStream(in) : in);
writer = new OutputStreamWriter(gzipEncoded ? new GZIPOutputStream(out) : out);
}
-
+
rewriter.setBaseUrl(rewriterContextPath + localPathInfo);
rewriter.rewrite(parserAdaptor, reader, writer);
writer.flush();
@@ -769,11 +785,11 @@ public class RewritableHttpReverseProxyS
}
}
}
-
+
private Rewriter createRewriter(RewriterController rewriterController, HttpReverseProxyPathMapper proxyPathMapper) throws Exception
{
Ruleset rewriterRuleset = proxyPathMapperProvider.getRewriterRuleset(proxyPathMapper);
-
+
if (rewriterRuleset == null)
{
return rewriterController.createRewriter();
@@ -783,17 +799,17 @@ public class RewritableHttpReverseProxyS
return rewriterController.createRewriter(rewriterRuleset);
}
}
-
+
private ParserAdaptor createParserAdaptor(RewriterController rewriterController, HttpEntity httpEntity) throws Exception
{
String contentType = null;
Header contentTypeHeader = httpEntity.getContentType();
-
+
if (contentTypeHeader != null)
{
contentType = contentTypeHeader.getValue();
}
-
+
if (contentType == null)
{
return null;
@@ -801,29 +817,29 @@ public class RewritableHttpReverseProxyS
String mimeType = contentType;
int offset = mimeType.indexOf(';');
-
+
if (offset > 0)
{
mimeType = mimeType.substring(0, offset).trim();
}
-
+
return rewriterController.createParserAdaptor(mimeType);
}
-
+
private List<SSOSiteCredentials> getSSOSiteCredentials(String siteURL, DefaultHttpClient httpClient, HttpServletRequest request)
{
SSOSiteCredentialsProvider credsProvider = (SSOSiteCredentialsProvider) request.getAttribute(HttpReverseProxyConstants.SSO_SITE_CREDENTIALS_PROVIDER);
-
+
if (credsProvider == null)
{
HttpSession session = request.getSession(false);
-
+
if (session != null)
{
credsProvider = (SSOSiteCredentialsProvider) session.getAttribute(HttpReverseProxyConstants.SSO_SITE_CREDENTIALS_PROVIDER);
}
}
-
+
if (credsProvider == null)
{
return null;
@@ -833,28 +849,28 @@ public class RewritableHttpReverseProxyS
return credsProvider.getSSOCredentials(request, siteURL);
}
}
-
+
private ReverseProxyRequestContextProvider findReverseProxyRequestContextProvider(HttpServletRequest request)
{
ReverseProxyRequestContextProvider reverseProxyRequestContextProvider = (ReverseProxyRequestContextProvider) request.getAttribute(ReverseProxyRequestContextProvider.ROLE);
-
+
if (reverseProxyRequestContextProvider != null)
{
return reverseProxyRequestContextProvider;
}
-
+
HttpSession session = request.getSession(false);
-
+
if (session != null)
{
reverseProxyRequestContextProvider = (ReverseProxyRequestContextProvider) session.getAttribute(ReverseProxyRequestContextProvider.ROLE);
-
+
if (reverseProxyRequestContextProvider != null)
{
return reverseProxyRequestContextProvider;
}
}
-
+
return defaultReverseProxyRequestContextProvider;
}
}