portals-portalapps-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From woon...@apache.org
Subject svn commit: r820363 - in /portals/applications/webcontent/trunk: webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/ webcontent-jar/src/test/...
Date Wed, 30 Sep 2009 17:45:52 GMT
Author: woonsan
Date: Wed Sep 30 17:45:51 2009
New Revision: 820363

URL: http://svn.apache.org/viewvc?rev=820363&view=rev
Log:
APA-17: Adding default link rewriting feature for reverse proxying.

Added:
    portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContext.java
  (with props)
    portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContextAware.java
  (with props)
    portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
  (contents, props changed)
      - copied, changed from r820182, portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpProxyPathMapperImpl.java
    portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRewritingContext.java
  (with props)
    portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/PassMappingLinkRewritingParserAaptor.java
  (with props)
    portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java
  (with props)
Removed:
    portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpProxyPathMapperImpl.java
Modified:
    portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapperProvider.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-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.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/HttpReverseProxyPathMapperProvider.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapperProvider.java?rev=820363&r1=820362&r2=820363&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapperProvider.java
(original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/HttpReverseProxyPathMapperProvider.java
Wed Sep 30 17:45:51 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.portals.applications.webcontent.proxy;
 
+import java.util.List;
+
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.portals.applications.webcontent.rewriter.RewriterController;
@@ -53,4 +55,10 @@
      */
     public Ruleset findRewriterRuleset(HttpServletRequest request);
     
+    /**
+     * Returns unmodifiable proxy path mappers.
+     * @return
+     */
+    public List<HttpReverseProxyPathMapper> getProxyPathMappers();
+    
 }
\ No newline at end of file

Added: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContext.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContext.java?rev=820363&view=auto
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContext.java
(added)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContext.java
Wed Sep 30 17:45:51 2009
@@ -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;
+
+/**
+ * ReverseProxyRewritingContext interface providing some reverse proxy mapping related information.
+ * 
+ * @version $Id$
+ */
+public interface ReverseProxyRewritingContext
+{
+    
+    public HttpReverseProxyPathMapper getHttpReverseProxyPathMapper();
+    
+    public HttpReverseProxyPathMapperProvider getHttpReverseProxyPathMapperProvider();
+    
+    public String getRewritingContextPath();
+    
+}

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContext.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContext.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContextAware.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContextAware.java?rev=820363&view=auto
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContextAware.java
(added)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContextAware.java
Wed Sep 30 17:45:51 2009
@@ -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;
+
+/**
+ * ReverseProxyRewritingContextAware interface.
+ * <P>
+ * <CODE>ParserAdaptor</CODE> implementation class can implement this interface
+ * when it wants to be injected with <CODE>ReverseProxyRewritingContext</CODE>
object.
+ * </P>
+ * 
+ * @version $Id$
+ */
+public interface ReverseProxyRewritingContextAware
+{
+    
+    public void setReverseProxyRewritingContext(ReverseProxyRewritingContext reverseProxyRewritingContext);
+    
+}

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContextAware.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContextAware.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/ReverseProxyRewritingContextAware.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
(from r820182, portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpProxyPathMapperImpl.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?p2=portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java&p1=portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpProxyPathMapperImpl.java&r1=820182&r2=820363&rev=820363&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpProxyPathMapperImpl.java
(original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
Wed Sep 30 17:45:51 2009
@@ -24,12 +24,12 @@
  * 
  * @version $Id$
  */
-public class DefaultHttpProxyPathMapperImpl implements HttpReverseProxyPathMapper
+public class DefaultHttpReverseProxyPathMapperImpl implements HttpReverseProxyPathMapper
 {
     private String localBasePath;
     private String remoteBaseURL;
     
-    public DefaultHttpProxyPathMapperImpl(String localBasePath, String remoteBaseURL)
+    public DefaultHttpReverseProxyPathMapperImpl(String localBasePath, String remoteBaseURL)
     {
         this.localBasePath = localBasePath;
         this.remoteBaseURL = remoteBaseURL;

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultHttpReverseProxyPathMapperImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=820363&r1=820362&r2=820363&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
Wed Sep 30 17:45:51 2009
@@ -16,6 +16,7 @@
  */
 package org.apache.portals.applications.webcontent.proxy.impl;
 
+import java.util.Collections;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
@@ -120,4 +121,9 @@
         return null;
     }
     
+    public List<HttpReverseProxyPathMapper> getProxyPathMappers()
+    {
+        return Collections.unmodifiableList(proxyPathMappers);
+    }
+    
 }

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=820363&r1=820362&r2=820363&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
Wed Sep 30 17:45:51 2009
@@ -148,7 +148,7 @@
                 String localBasePath = pathPassConf.getString("local");
                 String remoteBaseURL = pathPassConf.getString("remote");
                 
-                proxyPathMappers.add(new DefaultHttpProxyPathMapperImpl(localBasePath, remoteBaseURL));
+                proxyPathMappers.add(new DefaultHttpReverseProxyPathMapperImpl(localBasePath,
remoteBaseURL));
                 
                 Configuration rewritersConf = pathPassConf.subset("rewriter");
                 

Added: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRewritingContext.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRewritingContext.java?rev=820363&view=auto
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRewritingContext.java
(added)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRewritingContext.java
Wed Sep 30 17:45:51 2009
@@ -0,0 +1,56 @@
+/*
+ * 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 org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapper;
+import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapperProvider;
+import org.apache.portals.applications.webcontent.proxy.ReverseProxyRewritingContext;
+
+/**
+ * DefaultReverseProxyRewritingContext
+ * 
+ * @version $Id$
+ */
+public class DefaultReverseProxyRewritingContext implements ReverseProxyRewritingContext
+{
+    
+    private HttpReverseProxyPathMapper httpReverseProxyPathMapper;
+    private HttpReverseProxyPathMapperProvider httpReverseProxyPathMapperProvider;
+    private String rewritingContextPath;
+    
+    public DefaultReverseProxyRewritingContext(HttpReverseProxyPathMapper httpReverseProxyPathMapper,
HttpReverseProxyPathMapperProvider httpReverseProxyPathMapperProvider, String rewritingContextPath)
+    {
+        this.httpReverseProxyPathMapper = httpReverseProxyPathMapper;
+        this.httpReverseProxyPathMapperProvider = httpReverseProxyPathMapperProvider;
+        this.rewritingContextPath = rewritingContextPath;
+    }
+    
+    public HttpReverseProxyPathMapper getHttpReverseProxyPathMapper()
+    {
+        return httpReverseProxyPathMapper;
+    }
+
+    public HttpReverseProxyPathMapperProvider getHttpReverseProxyPathMapperProvider()
+    {
+        return httpReverseProxyPathMapperProvider;
+    }
+
+    public String getRewritingContextPath()
+    {
+        return rewritingContextPath;
+    }
+}

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRewritingContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRewritingContext.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/DefaultReverseProxyRewritingContext.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/PassMappingLinkRewritingParserAaptor.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/PassMappingLinkRewritingParserAaptor.java?rev=820363&view=auto
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/PassMappingLinkRewritingParserAaptor.java
(added)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/PassMappingLinkRewritingParserAaptor.java
Wed Sep 30 17:45:51 2009
@@ -0,0 +1,116 @@
+/*
+ * 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 java.io.BufferedWriter;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.LineIterator;
+import org.apache.commons.lang.StringUtils;
+import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapper;
+import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapperProvider;
+import org.apache.portals.applications.webcontent.proxy.ReverseProxyRewritingContext;
+import org.apache.portals.applications.webcontent.proxy.ReverseProxyRewritingContextAware;
+import org.apache.portals.applications.webcontent.rewriter.ParserAdaptor;
+import org.apache.portals.applications.webcontent.rewriter.Rewriter;
+import org.apache.portals.applications.webcontent.rewriter.RewriterException;
+
+/**
+ * A simple reverse proxy link rewriting parser adaptor implementation.
+ * <P>
+ * You can refer to this example to implement more sophisticated rewriting parser adaptor.
+ * </P>
+ * 
+ * @version $Id$
+ */
+public class PassMappingLinkRewritingParserAaptor implements ParserAdaptor, ReverseProxyRewritingContextAware
+{
+    
+    private ReverseProxyRewritingContext reverseProxyRewritingContext;
+    
+    private Pattern linkBasePathPattern = Pattern.compile("\\s(href|src|action)\\s*=\\s*['\"]((\\/)[^'\"]+)['\"]",
Pattern.CASE_INSENSITIVE);
+    
+    private String [] linkRemoteBaseURLSearches = { "/", "." };
+    private String [] linkRemoteBaseURLReplaces = { "\\/", "\\." };
+    
+    public PassMappingLinkRewritingParserAaptor()
+    {
+    }
+    
+    public void setReverseProxyRewritingContext(ReverseProxyRewritingContext reverseProxyRewritingContext)
+    {
+        this.reverseProxyRewritingContext = reverseProxyRewritingContext;
+    }
+    
+    public void rewrite(Rewriter rewriter, Reader reader, Writer writer) throws RewriterException
+    {
+        HttpReverseProxyPathMapperProvider mapperProvider = reverseProxyRewritingContext.getHttpReverseProxyPathMapperProvider();
+        HttpReverseProxyPathMapper myProxyMapper = reverseProxyRewritingContext.getHttpReverseProxyPathMapper();
+        String rewritingContextPath = reverseProxyRewritingContext.getRewritingContextPath();
+        
+        String localBasePath = myProxyMapper.getLocalBasePath();
+        String normalizedLocalBasePath = StringUtils.removeEnd(localBasePath, "/");
+
+        List<HttpReverseProxyPathMapper> proxyMappers = mapperProvider.getProxyPathMappers();
+        int proxyMappersCount = proxyMappers.size();
+        Pattern [] proxyMapperRemoteURLPatterns = new Pattern[proxyMappersCount];
+        String [] proxyMapperMatcherReplaces = new String[proxyMappersCount];
+        
+        int index = 0;
+        for (HttpReverseProxyPathMapper proxyMapper : proxyMappers)
+        {
+            String remoteBaseURLPattern = StringUtils.replaceEach(StringUtils.removeEnd(proxyMapper.getRemoteBaseURL(),
"/"), linkRemoteBaseURLSearches, linkRemoteBaseURLReplaces);
+            proxyMapperRemoteURLPatterns[index] = Pattern.compile("\\s(href|src|action)\\s*=\\s*['\"]("
+ remoteBaseURLPattern + "([^'\"]+))['\"]", Pattern.CASE_INSENSITIVE);
+            proxyMapperMatcherReplaces[index] = rewritingContextPath + StringUtils.removeEnd(proxyMapper.getLocalBasePath(),
"/");
+            ++index;
+        }
+        
+        PrintWriter out = new PrintWriter(new BufferedWriter(writer));
+        
+        for (LineIterator lineIt = IOUtils.lineIterator(reader); lineIt.hasNext(); )
+        {
+            String line = lineIt.nextLine();
+            
+            // first, replace slash leading relative paths by slash leading reverse proxying
relative paths. 
+            Matcher linkBasePathMatcher = linkBasePathPattern.matcher(line);
+            line = linkBasePathMatcher.replaceAll(" $1=\"" + rewritingContextPath + normalizedLocalBasePath
+ "$2\"");
+            
+            // second, replace absolute urls by slash leading relative paths.
+            for (int i = 0; i < proxyMappersCount; i++)
+            {
+                Matcher otherLinkBasePathMatcher = proxyMapperRemoteURLPatterns[i].matcher(line);
+                line = otherLinkBasePathMatcher.replaceAll(" $1=\"" + proxyMapperMatcherReplaces[i]
+ "$3\"");
+            }
+            
+            out.println(line);
+        }
+        
+        out.flush();
+    }
+    
+    public void parse(Rewriter rewriter, Reader reader) throws RewriterException
+    {
+        throw new UnsupportedOperationException();
+    }
+    
+}

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/PassMappingLinkRewritingParserAaptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/PassMappingLinkRewritingParserAaptor.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/PassMappingLinkRewritingParserAaptor.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=820363&r1=820362&r2=820363&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
Wed Sep 30 17:45:51 2009
@@ -26,6 +26,8 @@
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -63,6 +65,8 @@
 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.ReverseProxyRewritingContext;
+import org.apache.portals.applications.webcontent.proxy.ReverseProxyRewritingContextAware;
 import org.apache.portals.applications.webcontent.proxy.SSOSiteCredentials;
 import org.apache.portals.applications.webcontent.proxy.SSOSiteCredentialsProvider;
 import org.apache.portals.applications.webcontent.rewriter.ParserAdaptor;
@@ -266,16 +270,18 @@
         {
             String headerName = (String) enumHeaderNames.nextElement();
             
-            if (headerName.equalsIgnoreCase(HTTP.CONTENT_LEN))
+            if (StringUtils.equalsIgnoreCase(headerName, HTTP.CONTENT_LEN))
                 continue;
             
-            if (headerName.equalsIgnoreCase(HTTP.TARGET_HOST))
+            if (StringUtils.equalsIgnoreCase(headerName, HTTP.TARGET_HOST))
                 continue;
             
-            if (headerName.equalsIgnoreCase(HttpReverseProxyConstants.HTTP_HEADER_RANGE))
+            // TODO: Is there any better way to handle "Range" and "If-Range" headers without
ignoring like these?
+            
+            if (StringUtils.equalsIgnoreCase(headerName, HttpReverseProxyConstants.HTTP_HEADER_RANGE))
                 continue;
             
-            if (headerName.equalsIgnoreCase(HttpReverseProxyConstants.HTTP_HEADER_IF_RANGE))
+            if (StringUtils.equalsIgnoreCase(headerName, HttpReverseProxyConstants.HTTP_HEADER_IF_RANGE))
                 continue;
             
             for (Enumeration enumHeaderValues = request.getHeaders(headerName); enumHeaderValues.hasMoreElements();
)
@@ -379,7 +385,7 @@
                         String headerName = header.getName();
                         String headerValue = header.getValue();
                         
-                        if (headerName.equalsIgnoreCase(HTTP.TARGET_HOST))
+                        if (StringUtils.equalsIgnoreCase(headerName, HTTP.TARGET_HOST))
                         {
                             response.setHeader(headerName, hostHeaderValue);
                         }
@@ -389,8 +395,14 @@
                         }
                     }
                     
+                    String rewriterContextPath = localBaseURL;
+                    
+                    if (rewriterContextPath == null) {
+                        rewriterContextPath = request.getContextPath() + request.getServletPath();
+                    }
+                    
                     // Send the content to the client
-                    writeHttpEntityToClient(request, response, httpEntity);
+                    writeHttpEntityToClient(request, response, httpEntity, proxyPathMapper,
rewriterContextPath);
                 }
             }
         }
@@ -419,7 +431,7 @@
         }
     }
     
-    private void writeHttpEntityToClient(HttpServletRequest request, HttpServletResponse
response, HttpEntity httpEntity) throws IOException
+    private void writeHttpEntityToClient(HttpServletRequest request, HttpServletResponse
response, HttpEntity httpEntity, HttpReverseProxyPathMapper proxyPathMapper, String rewriterContextPath)
throws IOException
     {
         InputStream in = null;
         Reader reader = null;
@@ -508,31 +520,35 @@
                     }
                     else
                     {
-                        String responseCharSet = EntityUtils.getContentCharSet(httpEntity);
+                        boolean gzipEncoded = false;
+                        Header contentEncodingHeader = httpEntity.getContentEncoding();
                         
-                        if (responseCharSet != null)
+                        if (contentEncodingHeader != null)
                         {
-                            reader = new InputStreamReader(in, responseCharSet);
-                            writer = new OutputStreamWriter(out, responseCharSet);
+                            gzipEncoded = StringUtils.equalsIgnoreCase("gzip", contentEncodingHeader.getValue());
                         }
-                        else
+                        
+                        if (parserAdaptor instanceof ReverseProxyRewritingContextAware)
                         {
-                            reader = new InputStreamReader(in);
-                            writer = new OutputStreamWriter(out);
+                            ReverseProxyRewritingContext rewritingContext = 
+                                new DefaultReverseProxyRewritingContext(proxyPathMapper,
proxyPathMapperProvider, rewriterContextPath);
+                            ((ReverseProxyRewritingContextAware) parserAdaptor).setReverseProxyRewritingContext(rewritingContext);
                         }
                         
-                        String contentBaseURL = null;
+                        String responseCharSet = EntityUtils.getContentCharSet(httpEntity);
                         
-                        if (localBaseURL != null)
+                        if (responseCharSet != null)
                         {
-                            contentBaseURL = localBaseURL + request.getPathInfo();
+                            reader = new InputStreamReader(gzipEncoded ? new GZIPInputStream(in)
: in, responseCharSet);
+                            writer = new OutputStreamWriter(gzipEncoded ? new GZIPOutputStream(out)
: out, responseCharSet);
                         }
                         else
                         {
-                            contentBaseURL = request.getContextPath() + request.getServletPath()
+ request.getPathInfo();
+                            reader = new InputStreamReader(gzipEncoded ? new GZIPInputStream(in)
: in);
+                            writer = new OutputStreamWriter(gzipEncoded ? new GZIPOutputStream(out)
: out);
                         }
                         
-                        rewriter.setBaseUrl(contentBaseURL);
+                        rewriter.setBaseUrl(rewriterContextPath + request.getPathInfo());
                         rewriter.rewrite(parserAdaptor, reader, writer);
                         writer.flush();
                     }

Modified: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java?rev=820363&r1=820362&r2=820363&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java
(original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/SimpleLinkRewritingParserAaptor.java
Wed Sep 30 17:45:51 2009
@@ -17,7 +17,6 @@
 package org.apache.portals.applications.webcontent.proxy.impl;
 
 import java.io.BufferedWriter;
-import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Reader;
 import java.io.Writer;
@@ -27,6 +26,9 @@
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.LineIterator;
 import org.apache.commons.lang.StringUtils;
+import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapper;
+import org.apache.portals.applications.webcontent.proxy.ReverseProxyRewritingContext;
+import org.apache.portals.applications.webcontent.proxy.ReverseProxyRewritingContextAware;
 import org.apache.portals.applications.webcontent.rewriter.ParserAdaptor;
 import org.apache.portals.applications.webcontent.rewriter.Rewriter;
 import org.apache.portals.applications.webcontent.rewriter.RewriterException;
@@ -39,46 +41,57 @@
  * 
  * @version $Id$
  */
-public class SimpleLinkRewritingParserAaptor implements ParserAdaptor
+public class SimpleLinkRewritingParserAaptor implements ParserAdaptor, ReverseProxyRewritingContextAware
 {
     
+    private ReverseProxyRewritingContext reverseProxyRewritingContext;
+    
     private Pattern linkBasePathPattern = Pattern.compile("\\s(href|src|action)\\s*=\\s*['\"]((\\/)[^'\"]+)['\"]",
Pattern.CASE_INSENSITIVE);
-
+    
+    private String [] linkRemoteBaseURLSearches = { "/", "." };
+    private String [] linkRemoteBaseURLReplaces = { "\\/", "\\." };
+    
     public SimpleLinkRewritingParserAaptor()
     {
     }
-
+    
+    public void setReverseProxyRewritingContext(ReverseProxyRewritingContext reverseProxyRewritingContext)
+    {
+        this.reverseProxyRewritingContext = reverseProxyRewritingContext;
+    }
+    
     public void rewrite(Rewriter rewriter, Reader reader, Writer writer) throws RewriterException
     {
-        String baseURL = rewriter.getBaseUrl();
-        int offset = baseURL.lastIndexOf('/');
-        
-        if (StringUtils.isBlank(baseURL) || offset != -1)
-        {
-            try
-            {
-                IOUtils.copy(reader, writer);
-            }
-            catch (IOException e)
-            {
-                throw new RewriterException(e);
-            }
-        }
+        HttpReverseProxyPathMapper myProxyMapper = reverseProxyRewritingContext.getHttpReverseProxyPathMapper();
+        String rewritingContextPath = reverseProxyRewritingContext.getRewritingContextPath();
         
-        baseURL = baseURL.substring(0, offset + 1);
+        String localBasePath = myProxyMapper.getLocalBasePath();
+        String normalizedLocalBasePath = StringUtils.removeEnd(localBasePath, "/");
+
+        String remoteBaseURLPattern = StringUtils.replaceEach(StringUtils.removeEnd(myProxyMapper.getRemoteBaseURL(),
"/"), linkRemoteBaseURLSearches, linkRemoteBaseURLReplaces);
+        Pattern proxyMapperRemoteURLPattern = Pattern.compile("\\s(href|src|action)\\s*=\\s*['\"]("
+ remoteBaseURLPattern + "([^'\"]+))['\"]", Pattern.CASE_INSENSITIVE);
+        String proxyMapperMatcherReplace = rewritingContextPath + StringUtils.removeEnd(myProxyMapper.getLocalBasePath(),
"/");
         
         PrintWriter out = new PrintWriter(new BufferedWriter(writer));
         
         for (LineIterator lineIt = IOUtils.lineIterator(reader); lineIt.hasNext(); )
         {
             String line = lineIt.nextLine();
+            
+            // first, replace slash leading relative paths by slash leading reverse proxying
relative paths. 
             Matcher linkBasePathMatcher = linkBasePathPattern.matcher(line);
-            out.println(linkBasePathMatcher.replaceAll(" $1=\"" + baseURL + "$2\""));
+            line = linkBasePathMatcher.replaceAll(" $1=\"" + rewritingContextPath + normalizedLocalBasePath
+ "$2\"");
+            
+            // second, replace absolute urls by slash leading relative paths.
+            Matcher otherLinkBasePathMatcher = proxyMapperRemoteURLPattern.matcher(line);
+            line = otherLinkBasePathMatcher.replaceAll(" $1=\"" + proxyMapperMatcherReplace
+ "$3\"");
+            
+            out.println(line);
         }
         
         out.flush();
     }
-
+    
     public void parse(Rewriter rewriter, Reader reader) throws RewriterException
     {
         throw new UnsupportedOperationException();

Added: portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java?rev=820363&view=auto
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java
(added)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java
Wed Sep 30 17:45:51 2009
@@ -0,0 +1,102 @@
+/*
+ * 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 java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.portals.applications.webcontent.proxy.impl.DefaultHttpReverseProxyPathMapperImpl;
+import org.apache.portals.applications.webcontent.proxy.impl.DefaultHttpReverseProxyPathMapperProviderImpl;
+import org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyRewritingContext;
+import org.apache.portals.applications.webcontent.proxy.impl.PassMappingLinkRewritingParserAaptor;
+import org.apache.portals.applications.webcontent.proxy.impl.SimpleLinkRewritingParserAaptor;
+
+/**
+ * TestSimpleLinkRewritingParserAaptor
+ * 
+ * @version $Id$
+ */
+public class TestReverseProxyLinkRewritingParserAaptor extends TestCase
+{
+    
+    private String html =
+        "<html>\n" +
+        "<p><a href=\"mission.html\">Mission</a> and <a href='about.html'>About</a></p>\n"
+
+        "<p><a href=\"/docs/\">Documents</a></p>\n" +
+        "<p><a href=\"http://portals.apache.org/projectinfo.html\">Project Info.</a></p>\n"
+
+        "<p><a href=\"http://www.apache.org/events.html\">Events</a></p>\n"
+
+        "</html>";
+    
+    public void testSimpleRewriting() throws Exception
+    {
+        SimpleLinkRewritingParserAaptor parserAdaptor = new SimpleLinkRewritingParserAaptor();
+        HttpReverseProxyPathMapper portalsProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("/portals/",
"http://portals.apache.org/");
+        HttpReverseProxyPathMapper apacheProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("/apache/",
"http://www.apache.org/");
+        HttpReverseProxyPathMapper localhostProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("/localhost/",
"http://www.localhost.com/");
+        HttpReverseProxyPathMapperProvider proxyPathMapperProvider =
+            new DefaultHttpReverseProxyPathMapperProviderImpl(Arrays.asList(new HttpReverseProxyPathMapper
[] { portalsProxyPathMapper, apacheProxyPathMapper, localhostProxyPathMapper }), null, null);
+        
+        ReverseProxyRewritingContext rewritingContext = 
+            new DefaultReverseProxyRewritingContext(portalsProxyPathMapper, proxyPathMapperProvider,
"/webcontent/rproxy");
+        parserAdaptor.setReverseProxyRewritingContext(rewritingContext);
+        
+        StringReader reader = new StringReader(html);
+        StringWriter writer = new StringWriter();
+        parserAdaptor.rewrite(null, reader, writer);
+        
+        List<String> lines = (List<String>) IOUtils.readLines(new StringReader(writer.toString()));
+        
+        assertTrue("Wrong rewriting: " + lines.get(1), StringUtils.contains(lines.get(1),
"href=\"mission.html\""));
+        assertTrue("Wrong rewriting: " + lines.get(1), StringUtils.contains(lines.get(1),
"href='about.html'"));
+        assertTrue("Wrong rewriting: " + lines.get(2), StringUtils.contains(lines.get(2),
"href=\"/webcontent/rproxy/portals/docs/\""));
+        assertTrue("Wrong rewriting: " + lines.get(3), StringUtils.contains(lines.get(3),
"href=\"/webcontent/rproxy/portals/projectinfo.html\""));
+        assertTrue("Wrong rewriting: " + lines.get(4), StringUtils.contains(lines.get(4),
"href=\"http://www.apache.org/events.html\""));
+    }
+    
+    public void testPathMappingRewriting() throws Exception
+    {
+        PassMappingLinkRewritingParserAaptor parserAdaptor = new PassMappingLinkRewritingParserAaptor();
+        HttpReverseProxyPathMapper portalsProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("/portals/",
"http://portals.apache.org/");
+        HttpReverseProxyPathMapper apacheProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("/apache/",
"http://www.apache.org/");
+        HttpReverseProxyPathMapper localhostProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("/localhost/",
"http://www.localhost.com/");
+        HttpReverseProxyPathMapperProvider proxyPathMapperProvider =
+            new DefaultHttpReverseProxyPathMapperProviderImpl(Arrays.asList(new HttpReverseProxyPathMapper
[] { portalsProxyPathMapper, apacheProxyPathMapper, localhostProxyPathMapper }), null, null);
+        
+        ReverseProxyRewritingContext rewritingContext = 
+            new DefaultReverseProxyRewritingContext(portalsProxyPathMapper, proxyPathMapperProvider,
"/webcontent/rproxy");
+        parserAdaptor.setReverseProxyRewritingContext(rewritingContext);
+        
+        StringReader reader = new StringReader(html);
+        StringWriter writer = new StringWriter();
+        parserAdaptor.rewrite(null, reader, writer);
+        
+        List<String> lines = (List<String>) IOUtils.readLines(new StringReader(writer.toString()));
+        
+        assertTrue("Wrong rewriting: " + lines.get(1), StringUtils.contains(lines.get(1),
"href=\"mission.html\""));
+        assertTrue("Wrong rewriting: " + lines.get(1), StringUtils.contains(lines.get(1),
"href='about.html'"));
+        assertTrue("Wrong rewriting: " + lines.get(2), StringUtils.contains(lines.get(2),
"href=\"/webcontent/rproxy/portals/docs/\""));
+        assertTrue("Wrong rewriting: " + lines.get(3), StringUtils.contains(lines.get(3),
"href=\"/webcontent/rproxy/portals/projectinfo.html\""));
+        assertTrue("Wrong rewriting: " + lines.get(4), StringUtils.contains(lines.get(4),
"href=\"/webcontent/rproxy/apache/events.html\""));
+    }
+    
+}

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=820363&r1=820362&r2=820363&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
Wed Sep 30 17:45:51 2009
@@ -80,6 +80,13 @@
 
 proxy.reverse.pass.portals.local = /portals/
 proxy.reverse.pass.portals.remote = http://portals.apache.org/
+proxy.reverse.pass.portals.rewriter.basic = org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
+proxy.reverse.pass.portals.rewriter.parserAdaptor = html
+# ... SimpleLinkRewritingParserAaptor rewrites links only based on its remote base URLs,
+# ... while PassMappingLinkRewritingParserAaptor rewrites links based on all reverse proxy
pass mappings.
+#proxy.reverse.pass.portals.rewriter.parserAdaptor.html = org.apache.portals.applications.webcontent.proxy.impl.SimpleLinkRewritingParserAaptor
+proxy.reverse.pass.portals.rewriter.parserAdaptor.html = org.apache.portals.applications.webcontent.proxy.impl.PassMappingLinkRewritingParserAaptor
+proxy.reverse.pass.portals.rewriter.parserAdaptor.html.mimeType = text/html
 
 proxy.reverse.pass.localhost.local = /localhost/
 proxy.reverse.pass.localhost.remote = http://localhost:8080/



Mime
View raw message