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 2014/07/15 06:28:19 UTC

svn commit: r1610573 - in /portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2: ./ chain/ impl/ servlet/

Author: woonsan
Date: Tue Jul 15 04:28:19 2014
New Revision: 1610573

URL: http://svn.apache.org/r1610573
Log:
APA-63: refines proxy mapping registry

Added:
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMappingRegistry.java
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/DefaultProxyMappingRegistry.java
Modified:
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMapping.java
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/HandleRedirectionCommand.java
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveContentRewriterCommand.java
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveProxyMappingCommand.java
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/ProxyContext.java
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/SimpleProxyMapping.java
    portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/servlet/SimpleReverseProxyServlet.java

Modified: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMapping.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMapping.java?rev=1610573&r1=1610572&r2=1610573&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMapping.java (original)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMapping.java Tue Jul 15 04:28:19 2014
@@ -16,6 +16,8 @@
  */
 package org.apache.portals.applications.webcontent2.proxy2;
 
+import org.apache.portals.applications.webcontent2.rewriter2.ContentRewriter;
+
 
 public interface ProxyMapping
 {
@@ -32,4 +34,6 @@ public interface ProxyMapping
 
     public String resolveLocalFromRemote(String remoteURI);
 
+    public ContentRewriter getContentRewriter();
+
 }

Added: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMappingRegistry.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMappingRegistry.java?rev=1610573&view=auto
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMappingRegistry.java (added)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/ProxyMappingRegistry.java Tue Jul 15 04:28:19 2014
@@ -0,0 +1,35 @@
+/*
+ * 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.webcontent2.proxy2;
+
+import java.util.Collection;
+
+
+
+public interface ProxyMappingRegistry
+{
+
+    public boolean addProxyMapping(ProxyMapping proxyMapping);
+
+    public boolean removeProxyMapping(ProxyMapping proxyMapping);
+
+    public Collection<ProxyMapping> getProxyMappings();
+
+    public ProxyMapping findProxyMappingByLocalPath(String localPath);
+
+    public ProxyMapping findProxyMappingByRemoteURI(String remoteURI);
+}

Modified: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/HandleRedirectionCommand.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/HandleRedirectionCommand.java?rev=1610573&r1=1610572&r2=1610573&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/HandleRedirectionCommand.java (original)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/HandleRedirectionCommand.java Tue Jul 15 04:28:19 2014
@@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletRes
 
 import org.apache.http.Header;
 import org.apache.http.HttpResponse;
+import org.apache.portals.applications.webcontent2.proxy2.ProxyMapping;
 import org.apache.portals.applications.webcontent2.proxy2.ReverseProxyException;
 import org.apache.portals.applications.webcontent2.proxy2.impl.AbstractProxyCommand;
 import org.apache.portals.applications.webcontent2.proxy2.impl.ProxyContext;
@@ -81,8 +82,17 @@ public class HandleRedirectionCommand ex
         // Modify the redirect to go to this proxy servlet rather that the proxied host
         String localPath = context.getResolvedMapping().resolveLocalFromRemote(location);
 
-        // TODO: 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 time ...
+        // 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)
+        {
+            ProxyMapping proxyMapping = context.getProxyMappingRegistry().findProxyMappingByRemoteURI(location);
+
+            if (proxyMapping != null)
+            {
+                localPath = proxyMapping.resolveLocalFromRemote(location);
+            }
+        }
 
         String redirectLocation = null;
 

Modified: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveContentRewriterCommand.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveContentRewriterCommand.java?rev=1610573&r1=1610572&r2=1610573&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveContentRewriterCommand.java (original)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveContentRewriterCommand.java Tue Jul 15 04:28:19 2014
@@ -22,6 +22,7 @@ import org.apache.portals.applications.w
 import org.apache.portals.applications.webcontent2.proxy2.ReverseProxyException;
 import org.apache.portals.applications.webcontent2.proxy2.impl.AbstractProxyCommand;
 import org.apache.portals.applications.webcontent2.proxy2.impl.ProxyContext;
+import org.apache.portals.applications.webcontent2.rewriter2.ContentRewriter;
 
 public class ResolveContentRewriterCommand extends AbstractProxyCommand
 {
@@ -30,7 +31,9 @@ public class ResolveContentRewriterComma
     protected boolean executeInternal(final ProxyContext context) throws ReverseProxyException, IOException
     {
         ProxyMapping resolvedMapping = context.getResolvedMapping();
-        // TODO:
+
+        ContentRewriter contentRewriter = resolvedMapping.getContentRewriter();
+        context.setContentRewriter(contentRewriter);
 
         return false;
     }

Modified: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveProxyMappingCommand.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveProxyMappingCommand.java?rev=1610573&r1=1610572&r2=1610573&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveProxyMappingCommand.java (original)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/chain/ResolveProxyMappingCommand.java Tue Jul 15 04:28:19 2014
@@ -21,6 +21,7 @@ import java.io.IOException;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.portals.applications.webcontent2.proxy2.ProxyMapping;
+import org.apache.portals.applications.webcontent2.proxy2.ProxyMappingRegistry;
 import org.apache.portals.applications.webcontent2.proxy2.ReverseProxyException;
 import org.apache.portals.applications.webcontent2.proxy2.impl.AbstractProxyCommand;
 import org.apache.portals.applications.webcontent2.proxy2.impl.ProxyContext;
@@ -28,25 +29,25 @@ import org.apache.portals.applications.w
 public class ResolveProxyMappingCommand extends AbstractProxyCommand
 {
 
-    private ProxyMapping [] proxyMappings;
+    private final ProxyMappingRegistry proxyMappingRegistry;
+
+    public ResolveProxyMappingCommand(final ProxyMappingRegistry proxyMappingRegistry)
+    {
+        this.proxyMappingRegistry = proxyMappingRegistry;
+    }
 
     @Override
     protected boolean executeInternal(final ProxyContext context) throws ReverseProxyException, IOException
     {
+        context.setProxyMappingRegistry(proxyMappingRegistry);
+
         final String localPath = context.getLocalPath();
 
         ProxyMapping resolvedMapping = null;
 
-        if (proxyMappings != null)
+        if (proxyMappingRegistry != null)
         {
-            for (ProxyMapping proxyMapping : proxyMappings)
-            {
-                if (proxyMapping.matchesLocal(localPath))
-                {
-                    resolvedMapping = proxyMapping;
-                    break;
-                }
-            }
+            resolvedMapping = proxyMappingRegistry.findProxyMappingByLocalPath(localPath);
         }
 
         if (resolvedMapping == null)
@@ -59,9 +60,4 @@ public class ResolveProxyMappingCommand 
         return false;
     }
 
-    public void setProxyMappings(ProxyMapping[] proxyMappings)
-    {
-        this.proxyMappings = proxyMappings;
-    }
-
 }

Added: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/DefaultProxyMappingRegistry.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/DefaultProxyMappingRegistry.java?rev=1610573&view=auto
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/DefaultProxyMappingRegistry.java (added)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/DefaultProxyMappingRegistry.java Tue Jul 15 04:28:19 2014
@@ -0,0 +1,92 @@
+/*
+ * 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.webcontent2.proxy2.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.portals.applications.webcontent2.proxy2.ProxyMapping;
+import org.apache.portals.applications.webcontent2.proxy2.ProxyMappingRegistry;
+
+
+
+public class DefaultProxyMappingRegistry implements ProxyMappingRegistry
+{
+
+    private List<ProxyMapping> proxyMappings = new ArrayList<ProxyMapping>();
+
+    public boolean addProxyMapping(ProxyMapping proxyMapping)
+    {
+        return proxyMappings.add(proxyMapping);
+    }
+
+    public boolean removeProxyMapping(ProxyMapping proxyMapping)
+    {
+        return proxyMappings.remove(proxyMapping);
+    }
+
+    public Collection<ProxyMapping> getProxyMappings()
+    {
+        return Collections.unmodifiableCollection(proxyMappings);
+    }
+
+    public ProxyMapping findProxyMappingByLocalPath(String localPath)
+    {
+        if (localPath == null)
+        {
+            return null;
+        }
+
+        String localBasePath = null;
+
+        for (ProxyMapping proxyMapping : proxyMappings)
+        {
+            localBasePath = proxyMapping.getLocalBasePath();
+
+            if (localBasePath != null && localPath.startsWith(localBasePath))
+            {
+                return proxyMapping;
+            }
+        }
+
+        return null;
+    }
+
+    public ProxyMapping findProxyMappingByRemoteURI(String remoteURI)
+    {
+        if (remoteURI == null)
+        {
+            return null;
+        }
+
+        String remoteBaseURI = null;
+
+        for (ProxyMapping proxyMapping : proxyMappings)
+        {
+            remoteBaseURI = proxyMapping.getRemoteBaseURI();
+
+            if (remoteBaseURI != null && remoteURI.startsWith(remoteBaseURI))
+            {
+                return proxyMapping;
+            }
+        }
+
+        return null;
+    }
+}

Modified: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/ProxyContext.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/ProxyContext.java?rev=1610573&r1=1610572&r2=1610573&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/ProxyContext.java (original)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/ProxyContext.java Tue Jul 15 04:28:19 2014
@@ -25,6 +25,7 @@ import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.portals.applications.webcontent2.proxy2.ProxyMapping;
+import org.apache.portals.applications.webcontent2.proxy2.ProxyMappingRegistry;
 import org.apache.portals.applications.webcontent2.proxy2.RequestContext;
 import org.apache.portals.applications.webcontent2.rewriter2.ContentRewriter;
 
@@ -34,6 +35,7 @@ public class ProxyContext extends Contex
     private static final long serialVersionUID = 1L;
 
     private RequestContext requestContext;
+    private ProxyMappingRegistry proxyMappingRegistry;
     private ProxyMapping resolvedMapping;
     private String localPath;
     private String remoteURI;
@@ -64,6 +66,16 @@ public class ProxyContext extends Contex
         this.requestContext = requestContext;
     }
 
+    public ProxyMappingRegistry getProxyMappingRegistry()
+    {
+        return proxyMappingRegistry;
+    }
+
+    public void setProxyMappingRegistry(ProxyMappingRegistry proxyMappingRegistry)
+    {
+        this.proxyMappingRegistry = proxyMappingRegistry;
+    }
+
     public ProxyMapping getResolvedMapping()
     {
         return resolvedMapping;

Modified: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/SimpleProxyMapping.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/SimpleProxyMapping.java?rev=1610573&r1=1610572&r2=1610573&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/SimpleProxyMapping.java (original)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/impl/SimpleProxyMapping.java Tue Jul 15 04:28:19 2014
@@ -18,17 +18,20 @@ package org.apache.portals.applications.
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.portals.applications.webcontent2.proxy2.ProxyMapping;
+import org.apache.portals.applications.webcontent2.rewriter2.ContentRewriter;
 
 public class SimpleProxyMapping implements ProxyMapping
 {
 
     private final String localBasePath;
     private final String remoteBaseURI;
+    private final ContentRewriter contentRewriter;
 
-    public SimpleProxyMapping(final String localBasePath, final String remoteBaseURI)
+    public SimpleProxyMapping(final String localBasePath, final String remoteBaseURI, final ContentRewriter contentRewriter)
     {
         this.localBasePath = localBasePath;
         this.remoteBaseURI = remoteBaseURI;
+        this.contentRewriter = contentRewriter;
     }
 
     public String getLocalBasePath()
@@ -70,4 +73,9 @@ public class SimpleProxyMapping implemen
 
         return null;
     }
+
+    public ContentRewriter getContentRewriter()
+    {
+        return contentRewriter;
+    }
 }

Modified: portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/servlet/SimpleReverseProxyServlet.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/servlet/SimpleReverseProxyServlet.java?rev=1610573&r1=1610572&r2=1610573&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/servlet/SimpleReverseProxyServlet.java (original)
+++ portals/applications/webcontent/trunk/reverse-proxy/src/main/java/org/apache/portals/applications/webcontent2/proxy2/servlet/SimpleReverseProxyServlet.java Tue Jul 15 04:28:19 2014
@@ -30,7 +30,7 @@ import org.apache.http.conn.ssl.SSLSocke
 import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
 import org.apache.http.params.BasicHttpParams;
 import org.apache.http.params.HttpParams;
-import org.apache.portals.applications.webcontent2.proxy2.ProxyMapping;
+import org.apache.portals.applications.webcontent2.proxy2.ProxyMappingRegistry;
 import org.apache.portals.applications.webcontent2.proxy2.chain.AddCookiesToResponseCommand;
 import org.apache.portals.applications.webcontent2.proxy2.chain.AddHeaderToHttpRequestCommand;
 import org.apache.portals.applications.webcontent2.proxy2.chain.AddHeadersToResponseCommand;
@@ -47,6 +47,7 @@ import org.apache.portals.applications.w
 import org.apache.portals.applications.webcontent2.proxy2.chain.ResolveRemoteURICommand;
 import org.apache.portals.applications.webcontent2.proxy2.chain.SerializeHttpEntityContentCommand;
 import org.apache.portals.applications.webcontent2.proxy2.impl.AbstractProxyCommand;
+import org.apache.portals.applications.webcontent2.proxy2.impl.DefaultProxyMappingRegistry;
 import org.apache.portals.applications.webcontent2.proxy2.impl.DefaultReverseProxyService;
 import org.apache.portals.applications.webcontent2.proxy2.impl.ProxyProcessingChain;
 import org.apache.portals.applications.webcontent2.proxy2.impl.SimpleProxyMapping;
@@ -95,9 +96,10 @@ public class SimpleReverseProxyServlet e
 
         ResolveLocalPathCommand resolveLocalPathCommand = new ResolveLocalPathCommand();
 
-        ResolveProxyMappingCommand resolveProxyMappingCommand = new ResolveProxyMappingCommand();
         // TODO: read config
-        resolveProxyMappingCommand.setProxyMappings(new ProxyMapping [] { new SimpleProxyMapping("/", "http://portals.apache.org/") });
+        ProxyMappingRegistry proxyMappingRegistry = new DefaultProxyMappingRegistry();
+        proxyMappingRegistry.addProxyMapping(new SimpleProxyMapping("/", "http://portals.apache.org/", null));
+        ResolveProxyMappingCommand resolveProxyMappingCommand = new ResolveProxyMappingCommand(proxyMappingRegistry);
 
         ResolveRemoteURICommand resolveRemoteURICommand = new ResolveRemoteURICommand();
         ResolveContentRewriterCommand resolveContentRewriterCommand = new ResolveContentRewriterCommand();