Author: woonsan
Date: Tue Jul 20 00:35:21 2010
New Revision: 965693
URL: http://svn.apache.org/viewvc?rev=965693&view=rev
Log:
APA-42: Adding security role checking option.
Also, removing all secured apache example configuration because they could
cause unexpected results.
Added:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRequestContextProvider.java
(with props)
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRequestContextProvider.java
(with props)
Modified:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapper.java
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperProviderImpl.java
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyServlet.java
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java
portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties
Modified:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapper.java
URL:
http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapper.java?rev=965693&r1=965692&r2=965693&view=diff
==============================================================================
---
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapper.java
(original)
+++
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapper.java
Tue Jul 20 00:35:21 2010
@@ -63,6 +63,18 @@ public interface HttpReverseProxyPathMap
public String getLocalPath(String remoteURL);
/**
+ * Returns true when the reverse proxy path resources are secured to
allowed roles only.
+ * @return
+ */
+ public boolean isSecured();
+
+ /**
+ * Returns the role names allowed to reverse proxy path resources.
+ * @return
+ */
+ public Set<String> getAllowedRoles();
+
+ /**
* Returns default request headers to the remote URL target.
* @return
*/
Added:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRequestContextProvider.java
URL:
http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRequestContextProvider.java?rev=965693&view=auto
==============================================================================
---
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRequestContextProvider.java
(added)
+++
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRequestContextProvider.java
Tue Jul 20 00:35:21 2010
@@ -0,0 +1,46 @@
+/*
+ * 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.portals.applications.webcontent.proxy;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * ReverseProxyRequestContextProvider interface providing the underlying
request context information.
+ * The underlying request context provider object can be provided by the
frontend filter
+ * or portlet which forward or redirect to the reverse proxy servlet.
+ *
+ * @version $Id$
+ */
+public interface ReverseProxyRequestContextProvider
+{
+
+ /**
+ * The attribute name by which the runtime context provider object is
retrieved.
+ */
+ public static final String ROLE =
ReverseProxyRequestContextProvider.class.getName();
+
+ /**
+ * Returns a boolean indicating whether the authenticated user is included
in the specified logical "role" from the underlying request context.
+ * If the user has not been authenticated, the method returns false.
+ *
+ * @param request
+ * @param role
+ * @return
+ */
+ boolean isUserInRole(HttpServletRequest request, String role);
+
+}
Propchange:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRequestContextProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRequestContextProvider.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
URL:
http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java?rev=965693&r1=965692&r2=965693&view=diff
==============================================================================
---
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
(original)
+++
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
Tue Jul 20 00:35:21 2010
@@ -32,6 +32,8 @@ public class DefaultHttpReverseProxyPath
private String name;
private String localBasePath;
private String remoteBaseURL;
+ private boolean secured;
+ private Set<String> allowedRoles;
private Map<String, String> defaultRequestHeaders;
private Map<String, String> defaultRequestCookies;
@@ -43,16 +45,19 @@ public class DefaultHttpReverseProxyPath
public DefaultHttpReverseProxyPathMapperImpl(String name, String
localBasePath, String remoteBaseURL)
{
- this(name, localBasePath, remoteBaseURL, null, null, null, null);
+ this(name, localBasePath, remoteBaseURL, false, null, null, null,
null, null);
}
public DefaultHttpReverseProxyPathMapperImpl(String name, String
localBasePath, String remoteBaseURL,
+ boolean secured, Set<String>
allowedRoles,
Map<String, String>
defaultRequestHeaders, Map<String, String> defaultRequestCookies,
Set<String>
rewriteCookiePathIncludes, Set<String> rewriteCookiePathExcludes)
{
this.name = name;
this.localBasePath = localBasePath;
this.remoteBaseURL = remoteBaseURL;
+ this.secured = secured;
+ this.allowedRoles = allowedRoles;
this.defaultRequestHeaders = defaultRequestHeaders;
this.defaultRequestCookies = defaultRequestCookies;
this.rewriteCookiePathIncludes = rewriteCookiePathIncludes;
@@ -96,6 +101,16 @@ public class DefaultHttpReverseProxyPath
return null;
}
+ public boolean isSecured()
+ {
+ return secured;
+ }
+
+ public Set<String> getAllowedRoles()
+ {
+ return allowedRoles;
+ }
+
public Map<String, String> getDefaultRequestHeaders()
{
return defaultRequestHeaders;
Modified:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperProviderImpl.java
URL:
http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperProviderImpl.java?rev=965693&r1=965692&r2=965693&view=diff
==============================================================================
---
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperProviderImpl.java
(original)
+++
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperProviderImpl.java
Tue Jul 20 00:35:21 2010
@@ -219,6 +219,8 @@ public class DefaultHttpReverseProxyPath
new
DefaultHttpReverseProxyPathMapperImpl(proxyPathMapper.getName() + ":" +
localBasePath,
localBasePath,
remoteBaseURL,
+
proxyPathMapper.isSecured(),
+
proxyPathMapper.getAllowedRoles(),
proxyPathMapper.getDefaultRequestHeaders(),
proxyPathMapper.getDefaultRequestCookies(),
proxyPathMapper.getRewriteCookiePathIncludes(),
@@ -317,6 +319,8 @@ public class DefaultHttpReverseProxyPath
new
DefaultHttpReverseProxyPathMapperImpl(proxyPathMapper.getName() + ":" +
localBasePath,
localBasePath,
remoteBaseURL,
+
proxyPathMapper.isSecured(),
+
proxyPathMapper.getAllowedRoles(),
proxyPathMapper.getDefaultRequestHeaders(),
proxyPathMapper.getDefaultRequestCookies(),
proxyPathMapper.getRewriteCookiePathIncludes(),
Modified:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyServlet.java
URL:
http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyServlet.java?rev=965693&r1=965692&r2=965693&view=diff
==============================================================================
---
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyServlet.java
(original)
+++
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyServlet.java
Tue Jul 20 00:35:21 2010
@@ -67,6 +67,7 @@ import org.apache.portals.applications.w
import
org.apache.portals.applications.webcontent.proxy.HttpReverseProxyNotFoundException;
import
org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapper;
import
org.apache.portals.applications.webcontent.proxy.HttpReverseProxyService;
+import
org.apache.portals.applications.webcontent.proxy.ReverseProxyRequestContextProvider;
import
org.apache.portals.applications.webcontent.rewriter.MappingRewriterController;
import org.apache.portals.applications.webcontent.rewriter.RewriterController;
import org.apache.portals.applications.webcontent.rewriter.rules.Ruleset;
@@ -175,6 +176,13 @@ public class DefaultHttpReverseProxyServ
continue;
}
+ Set<String> allowedRoles = null;
+ boolean secured = pathPassConf.containsKey("roles.allow");
+ if (secured)
+ {
+ allowedRoles = new
HashSet<String>(Arrays.asList(pathPassConf.getStringArray("roles.allow")));
+ }
+
try
{
Map<String, String> defaultRequestHeaders = null;
@@ -227,6 +235,7 @@ public class DefaultHttpReverseProxyServ
HttpReverseProxyPathMapper proxyPathMapper =
new DefaultHttpReverseProxyPathMapperImpl(pathName,
localBasePath, remoteBaseURL,
+ secured,
allowedRoles,
defaultRequestHeaders, defaultRequestCookies,
rewriteCookiePathIncludes, rewriteCookiePathExcludes);
proxyPathMappers.add(proxyPathMapper);
@@ -264,6 +273,24 @@ public class DefaultHttpReverseProxyServ
}
}
+ ReverseProxyRequestContextProvider
defaultReverseProxyRequestContextProvider = null;
+ String reverseProxyRequestContextProviderClassName =
passConf.getString("reverseProxyRequestContextProviderClassName", null);
+ if (StringUtils.isBlank(reverseProxyRequestContextProviderClassName))
+ {
+ defaultReverseProxyRequestContextProvider = new
DefaultReverseProxyRequestContextProvider();
+ }
+ else
+ {
+ try
+ {
+ defaultReverseProxyRequestContextProvider =
(ReverseProxyRequestContextProvider)
Thread.currentThread().getContextClassLoader().loadClass(reverseProxyRequestContextProviderClassName).newInstance();
+ }
+ catch (Exception e)
+ {
+ throw new ServletException("Failure in instantiating the
default reverse proxy request context provider: " +
reverseProxyRequestContextProviderClassName, e);
+ }
+ }
+
int dynamicProxyPathMapperCacheCount = 1000;
try
{
@@ -292,7 +319,7 @@ public class DefaultHttpReverseProxyServ
schemeRegistry.register(new Scheme("http",
PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(new Scheme("https",
SSLSocketFactory.getSocketFactory(), 443));
- RewritableHttpReverseProxyServiceImpl tempProxyService = new
RewritableHttpReverseProxyServiceImpl(proxyPathMapperProvider);
+ RewritableHttpReverseProxyServiceImpl tempProxyService = new
RewritableHttpReverseProxyServiceImpl(proxyPathMapperProvider,
defaultReverseProxyRequestContextProvider);
tempProxyService.setSchemeRegistry(schemeRegistry);
ProxyHttpRoutePlanner httpRoutePlanner = new
ProxyHttpRoutePlanner(schemeRegistry);
tempProxyService.setHttpRoutePlanner(httpRoutePlanner);
Added:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRequestContextProvider.java
URL:
http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRequestContextProvider.java?rev=965693&view=auto
==============================================================================
---
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRequestContextProvider.java
(added)
+++
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRequestContextProvider.java
Tue Jul 20 00:35:21 2010
@@ -0,0 +1,33 @@
+/*
+ * 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.portals.applications.webcontent.proxy.impl;
+
+import javax.servlet.http.HttpServletRequest;
+
+import
org.apache.portals.applications.webcontent.proxy.ReverseProxyRequestContextProvider;
+
+/**
+ * DefaultReverseProxyRequestContextProvider
+ *
+ * @version $Id$
+ */
+public class DefaultReverseProxyRequestContextProvider implements
ReverseProxyRequestContextProvider
+{
+ public boolean isUserInRole(HttpServletRequest request, String role)
+ {
+ return request.isUserInRole(role);
+ }
+}
Propchange:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRequestContextProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRequestContextProvider.java
------------------------------------------------------------------------------
svn:keywords = Id
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=965693&r1=965692&r2=965693&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
Tue Jul 20 00:35:21 2010
@@ -80,6 +80,7 @@ import org.apache.portals.applications.w
import
org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapper;
import
org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapperProvider;
import
org.apache.portals.applications.webcontent.proxy.HttpReverseProxyService;
+import
org.apache.portals.applications.webcontent.proxy.ReverseProxyRequestContextProvider;
import
org.apache.portals.applications.webcontent.proxy.ReverseProxyRewritingContext;
import
org.apache.portals.applications.webcontent.proxy.ReverseProxyRewritingContextAware;
import org.apache.portals.applications.webcontent.proxy.SSOSiteCredentials;
@@ -107,6 +108,11 @@ public class RewritableHttpReverseProxyS
private HttpReverseProxyPathMapperProvider proxyPathMapperProvider;
/**
+ * Default reverse proxy request context
+ */
+ private ReverseProxyRequestContextProvider
defaultReverseProxyRequestContextProvider;
+
+ /**
* Forced host header value
*/
private String hostHeaderValue;
@@ -141,9 +147,14 @@ public class RewritableHttpReverseProxyS
*/
private HttpRoutePlanner httpRoutePlanner;
- public
RewritableHttpReverseProxyServiceImpl(HttpReverseProxyPathMapperProvider
proxyPathMapperProvider)
+ public
RewritableHttpReverseProxyServiceImpl(HttpReverseProxyPathMapperProvider
proxyPathMapperProvider, ReverseProxyRequestContextProvider
defaultReverseProxyRequestContextProvider)
{
this.proxyPathMapperProvider = proxyPathMapperProvider;
+
+ if (defaultReverseProxyRequestContextProvider != null)
+ {
+ this.defaultReverseProxyRequestContextProvider =
defaultReverseProxyRequestContextProvider;
+ }
}
public void setHostHeaderValue(String hostHeaderValue)
@@ -228,6 +239,33 @@ public class RewritableHttpReverseProxyS
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))
+ {
+ allowed = true;
+ break;
+ }
+ }
+ }
+
+ if (!allowed)
+ {
+ log.warn("The user is not in roles: " + allowedRoles);
+ response.sendError(HttpServletResponse.SC_FORBIDDEN);
+ return;
+ }
+ }
+
if (hostHeaderValue == null)
{
if (request.getServerPort() == 80)
@@ -778,5 +816,28 @@ public class RewritableHttpReverseProxyS
}
}
+ 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;
+ }
}
Modified:
portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties
URL:
http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties?rev=965693&r1=965692&r2=965693&view=diff
==============================================================================
---
portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties
(original)
+++
portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties
Tue Jul 20 00:35:21 2010
@@ -84,7 +84,7 @@ proxy.http.route.somewhere.proxy.proxyse
# ... By default, all the external sites are not included.
# ... You can enable all the examples against apache sites by uncommenting the
followed line.
proxy.reverse.pass = localhost, somewhere
-#proxy.reverse.pass = apache, all_apache, secure_apache, all_secure_apache,
localhost, somewhere
+#proxy.reverse.pass = apache, all_apache, secure_apache, localhost, somewhere
# ... Set cache count of proxy path mappers which are dynamically created by
glob style mappings.
proxy.reverse.pass.dynamicProxyPathMapperCacheCount = 1000
@@ -118,15 +118,6 @@ proxy.reverse.pass.secure_apache.rewrite
proxy.reverse.pass.secure_apache.rewriter.parserAdaptor.html.mimeType =
text/html
proxy.reverse.pass.secure_apache.rewriter.parserAdaptor.html.property.lookUpAllMappings
= true
-# ... Sets detail attributes for glob-based secure apache path mapping
-proxy.reverse.pass.all_secure_apache.local = /secure/*_apache/
-proxy.reverse.pass.all_secure_apache.remote = https://$1.apache.org/
-proxy.reverse.pass.all_secure_apache.rewriter.basic =
org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
-proxy.reverse.pass.all_secure_apache.rewriter.parserAdaptor = html
-proxy.reverse.pass.all_secure_apache.rewriter.parserAdaptor.html =
org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor
-proxy.reverse.pass.all_secure_apache.rewriter.parserAdaptor.html.mimeType =
text/html
-proxy.reverse.pass.all_secure_apache.rewriter.parserAdaptor.html.property.lookUpAllMappings
= true
-
# ... Sets detail attributes for localhost path mapping
proxy.reverse.pass.localhost.local = /localhost_*/
proxy.reverse.pass.localhost.remote = http://localhost:$1/