You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2011/01/13 23:45:52 UTC
svn commit: r1058769 - in /wicket/trunk/wicket-core/src:
main/java/org/apache/wicket/protocol/http/
main/java/org/apache/wicket/protocol/http/servlet/
test/java/org/apache/wicket/protocol/http/servlet/
Author: jdonnerstag
Date: Thu Jan 13 22:45:52 2011
New Revision: 1058769
URL: http://svn.apache.org/viewvc?rev=1058769&view=rev
Log:
As suggested by Igor I've added a simple FilterFactoryManager to manage "web filters"
Added:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/FilterFactoryManager.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/AbstractRequestWrapperFactory.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/SecuredRemoteAddressRequestWrapperFactory.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperFactory.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperTest.java
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java?rev=1058769&r1=1058768&r2=1058769&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/WebApplication.java Thu Jan 13 22:45:52 2011
@@ -33,6 +33,8 @@ import org.apache.wicket.markup.html.pag
import org.apache.wicket.markup.html.pages.InternalErrorPage;
import org.apache.wicket.markup.html.pages.PageExpiredErrorPage;
import org.apache.wicket.markup.resolver.AutoLinkResolver;
+import org.apache.wicket.protocol.http.servlet.AbstractRequestWrapperFactory;
+import org.apache.wicket.protocol.http.servlet.FilterFactoryManager;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.apache.wicket.protocol.http.servlet.ServletWebResponse;
import org.apache.wicket.request.IRequestHandler;
@@ -118,6 +120,8 @@ public abstract class WebApplication ext
private IContextProvider<AjaxRequestTarget, Page> ajaxRequestTargetProvider;
+ private FilterFactoryManager filterFactoryManager;
+
/**
* Covariant override for easy getting the current {@link WebApplication} without having to cast
* it.
@@ -364,9 +368,16 @@ public abstract class WebApplication ext
* the filter mapping read from web.xml
* @return a WebRequest object
*/
- protected WebRequest newWebRequest(final HttpServletRequest servletRequest,
- final String filterPath)
+ protected WebRequest newWebRequest(HttpServletRequest servletRequest, final String filterPath)
{
+ if (hasFilterFactoryManager())
+ {
+ for (AbstractRequestWrapperFactory factory : getFilterFactoryManager())
+ {
+ servletRequest = factory.getWrapper(servletRequest);
+ }
+ }
+
return new ServletWebRequest(servletRequest, filterPath);
}
@@ -742,4 +753,24 @@ public abstract class WebApplication ext
return new AjaxRequestTarget(context);
}
}
+
+ /**
+ * @return True if at least one filter factory has been added.
+ */
+ public final boolean hasFilterFactoryManager()
+ {
+ return filterFactoryManager != null;
+ }
+
+ /**
+ * @return The filter factory manager
+ */
+ public final FilterFactoryManager getFilterFactoryManager()
+ {
+ if (filterFactoryManager == null)
+ {
+ filterFactoryManager = new FilterFactoryManager();
+ }
+ return filterFactoryManager;
+ }
}
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/AbstractRequestWrapperFactory.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/AbstractRequestWrapperFactory.java?rev=1058769&r1=1058768&r2=1058769&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/AbstractRequestWrapperFactory.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/AbstractRequestWrapperFactory.java Thu Jan 13 22:45:52 2011
@@ -40,6 +40,13 @@ public abstract class AbstractRequestWra
private boolean enabled = true;
/**
+ * Construct.
+ */
+ public AbstractRequestWrapperFactory()
+ {
+ }
+
+ /**
*
* @return True, if filter is enabled
*/
Added: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/FilterFactoryManager.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/FilterFactoryManager.java?rev=1058769&view=auto
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/FilterFactoryManager.java (added)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/FilterFactoryManager.java Thu Jan 13 22:45:52 2011
@@ -0,0 +1,114 @@
+/*
+ * 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.wicket.protocol.http.servlet;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.FilterConfig;
+
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.lang.Generics;
+
+/**
+ * A very simple manager for web filter (web filter factories to be exact).
+ *
+ * @author Juergen Donnerstag
+ */
+public class FilterFactoryManager implements Iterable<AbstractRequestWrapperFactory>
+{
+ private List<AbstractRequestWrapperFactory> filters;
+
+ /**
+ * Construct.
+ */
+ public FilterFactoryManager()
+ {
+ }
+
+ /**
+ * Add a filter factory
+ *
+ * @param wrapperFactory
+ * @return this
+ */
+ public final FilterFactoryManager add(final AbstractRequestWrapperFactory wrapperFactory)
+ {
+ if (wrapperFactory != null)
+ {
+ if (filters == null)
+ {
+ filters = Generics.newArrayList(2);
+ }
+
+ filters.add(wrapperFactory);
+ }
+
+ return this;
+ }
+
+ /**
+ * Add a X-Forwarded web filter factory
+ *
+ * @param config
+ * If null, <code>WebApplication.get().getWicketFilter().getFilterConfig()</code>
+ * will be called to retrieve the config.
+ * @return this
+ */
+ public final FilterFactoryManager addXForwardedRequestWrapperFactory(FilterConfig config)
+ {
+ if (config == null)
+ {
+ config = WebApplication.get().getWicketFilter().getFilterConfig();
+ }
+
+ XForwardedRequestWrapperFactory factory = new XForwardedRequestWrapperFactory();
+ factory.init(config);
+
+ return add(factory);
+ }
+
+ /**
+ * Add a Secure remote address web filter factory
+ *
+ * @param config
+ * If null, <code>WebApplication.get().getWicketFilter().getFilterConfig()</code>
+ * will be called to retrieve the config.
+ * @return this
+ */
+ public final FilterFactoryManager addSecuredRemoteAddressRequestWrapperFactory(
+ FilterConfig config)
+ {
+ if (config == null)
+ {
+ config = WebApplication.get().getWicketFilter().getFilterConfig();
+ }
+
+ SecuredRemoteAddressRequestWrapperFactory factory = new SecuredRemoteAddressRequestWrapperFactory();
+ factory.init(config);
+
+ return add(factory);
+ }
+
+ /**
+ * @see java.lang.Iterable#iterator()
+ */
+ public Iterator<AbstractRequestWrapperFactory> iterator()
+ {
+ return filters.iterator();
+ }
+}
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/SecuredRemoteAddressRequestWrapperFactory.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/SecuredRemoteAddressRequestWrapperFactory.java?rev=1058769&r1=1058768&r2=1058769&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/SecuredRemoteAddressRequestWrapperFactory.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/SecuredRemoteAddressRequestWrapperFactory.java Thu Jan 13 22:45:52 2011
@@ -123,6 +123,13 @@ public class SecuredRemoteAddressRequest
private Config config = new Config();
/**
+ * Construct.
+ */
+ public SecuredRemoteAddressRequestWrapperFactory()
+ {
+ }
+
+ /**
* @return SecuredRemoteAddress and XForwarded filter specific config
*/
public final Config getConfig()
@@ -141,7 +148,7 @@ public class SecuredRemoteAddressRequest
}
/**
- * @see org.apache.wicket.protocol.http.servlet.AbstractRequestWrapperFactory#getWrapper(javax.servlet.http.HttpServletRequest)
+ * {@inheritDoc}
*/
@Override
public HttpServletRequest getWrapper(final HttpServletRequest request)
@@ -159,9 +166,7 @@ public class SecuredRemoteAddressRequest
}
/**
- *
- * @param request
- * @return True, if a wrapper is needed
+ * {@inheritDoc}
*/
@Override
public boolean needsWrapper(final HttpServletRequest request)
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperFactory.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperFactory.java?rev=1058769&r1=1058768&r2=1058769&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperFactory.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperFactory.java Thu Jan 13 22:45:52 2011
@@ -604,6 +604,13 @@ public class XForwardedRequestWrapperFac
private Config config = new Config();
/**
+ * Construct.
+ */
+ public XForwardedRequestWrapperFactory()
+ {
+ }
+
+ /**
* @return XForwarded filter specific config
*/
public final Config getConfig()
@@ -622,9 +629,7 @@ public class XForwardedRequestWrapperFac
}
/**
- *
- * @param request
- * @return True, if a wrapper is needed
+ * {@inheritDoc}
*/
@Override
public boolean needsWrapper(final HttpServletRequest request)
@@ -655,9 +660,10 @@ public class XForwardedRequestWrapperFac
LinkedList<String> proxiesHeaderValue = new LinkedList<String>();
String[] remoteIPHeaderValue = commaDelimitedListToStringArray(request.getHeader(config.remoteIPHeader));
- int idx;
+
// loop on remoteIPHeaderValue to find the first trusted remote ip and to build the
// proxies chain
+ int idx;
for (idx = remoteIPHeaderValue.length - 1; idx >= 0; idx--)
{
String currentRemoteIp = remoteIPHeaderValue[idx];
@@ -676,6 +682,7 @@ public class XForwardedRequestWrapperFac
break;
}
}
+
// continue to loop on remoteIPHeaderValue to build the new value of the remoteIPHeader
LinkedList<String> newRemoteIpHeaderValue = new LinkedList<String>();
for (; idx >= 0; idx--)
Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperTest.java?rev=1058769&r1=1058768&r2=1058769&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/XForwardedRequestWrapperTest.java Thu Jan 13 22:45:52 2011
@@ -23,7 +23,6 @@ import org.apache.wicket.markup.html.bas
import org.apache.wicket.mock.MockApplication;
import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
-import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.util.tester.WicketTester;
/**
@@ -159,10 +158,10 @@ public class XForwardedRequestWrapperTes
private class MyApplication extends MockApplication
{
- public XForwardedRequestWrapperFactory factory;
+ XForwardedRequestWrapperFactory factory;
/**
- * @see org.apache.wicket.protocol.http.WebApplication#init()
+ * {@inheritDoc}
*/
@Override
protected void init()
@@ -171,17 +170,8 @@ public class XForwardedRequestWrapperTes
factory = new XForwardedRequestWrapperFactory();
factory.init(getWicketFilter().getFilterConfig());
- }
- /**
- * @see org.apache.wicket.protocol.http.WebApplication#newWebRequest(javax.servlet.http.HttpServletRequest,
- * java.lang.String)
- */
- @Override
- protected WebRequest newWebRequest(HttpServletRequest request, String filterPath)
- {
- HttpServletRequest xRequest = factory.getWrapper(request);
- return super.newWebRequest(xRequest, filterPath);
+ getFilterFactoryManager().add(factory);
}
}