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();