You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2011/11/27 19:27:19 UTC
svn commit: r1206795 -
/incubator/isis/trunk/framework/runtimes/dflt/webapp/src/main/java/org/apache/isis/runtimes/dflt/webapp/IsisSessionFilter.java
Author: danhaywood
Date: Sun Nov 27 18:27:19 2011
New Revision: 1206795
URL: http://svn.apache.org/viewvc?rev=1206795&view=rev
Log:
ISIS-135: enhanced IsisSessionFilter so that it can ignore resources with an extension if required (as a solution to the .css not being served up correctly in the onlinedemo)
Modified:
incubator/isis/trunk/framework/runtimes/dflt/webapp/src/main/java/org/apache/isis/runtimes/dflt/webapp/IsisSessionFilter.java
Modified: incubator/isis/trunk/framework/runtimes/dflt/webapp/src/main/java/org/apache/isis/runtimes/dflt/webapp/IsisSessionFilter.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/runtimes/dflt/webapp/src/main/java/org/apache/isis/runtimes/dflt/webapp/IsisSessionFilter.java?rev=1206795&r1=1206794&r2=1206795&view=diff
==============================================================================
--- incubator/isis/trunk/framework/runtimes/dflt/webapp/src/main/java/org/apache/isis/runtimes/dflt/webapp/IsisSessionFilter.java (original)
+++ incubator/isis/trunk/framework/runtimes/dflt/webapp/src/main/java/org/apache/isis/runtimes/dflt/webapp/IsisSessionFilter.java Sun Nov 27 18:27:19 2011
@@ -20,6 +20,10 @@
package org.apache.isis.runtimes.dflt.webapp;
import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Pattern;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -29,7 +33,6 @@ import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.factory.InstanceUtil;
@@ -39,6 +42,11 @@ import org.apache.isis.runtimes.dflt.web
import org.apache.isis.runtimes.dflt.webapp.auth.AuthenticationSessionLookupStrategy.Caching;
import org.apache.isis.runtimes.dflt.webapp.auth.AuthenticationSessionLookupStrategyDefault;
+import com.google.common.base.Function;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Lists;
+
public class IsisSessionFilter implements Filter {
/**
@@ -63,11 +71,20 @@ public class IsisSessionFilter implement
*/
public static final String CACHE_AUTH_SESSION_ON_HTTP_SESSION_KEY = "cacheAuthSessionOnHttpSession";
+ /**
+ * Init parameter key for which extensions should be ignored (typically, static content).
+ *
+ * <p>
+ * The value is expected as a comma separated list, for example:
+ * <pre>css,png,js,gif</pre>
+ */
+ public static final String IGNORE_EXTENSIONS_KEY = "ignoreExtensions";
+
private AuthenticationSessionLookupStrategy authSessionLookupStrategy;
private String logonPageIfNoSession;
-
private Caching caching;
+ private Collection<Pattern> ignoreExtensions;
// /////////////////////////////////////////////////////////////////
// init, destroy
@@ -78,6 +95,7 @@ public class IsisSessionFilter implement
lookupAuthenticationSessionLookupStrategy(config);
lookupLogonPageIfNoSessionKey(config);
lookupCacheAuthSessionKey(config);
+ lookupIgnorePatterns(config);
}
private void lookupAuthenticationSessionLookupStrategy(final FilterConfig config) {
@@ -97,6 +115,25 @@ public class IsisSessionFilter implement
caching = Caching.lookup(config.getInitParameter(CACHE_AUTH_SESSION_ON_HTTP_SESSION_KEY));
}
+ private void lookupIgnorePatterns(final FilterConfig config) {
+ ignoreExtensions = Collections.unmodifiableCollection(parseIgnorePatterns(config));
+ }
+
+ private Collection<Pattern> parseIgnorePatterns(final FilterConfig config) {
+ final String ignoreExtensionsStr = config.getInitParameter(IGNORE_EXTENSIONS_KEY);
+ if(ignoreExtensionsStr != null) {
+ final List<String> ignoreExtensions = Lists.newArrayList(Splitter.on(",").split(ignoreExtensionsStr));
+ return Collections2.transform(ignoreExtensions, new Function<String,Pattern>() {
+ @Override
+ public Pattern apply(String input) {
+ return Pattern.compile(".*\\." + input);
+ }
+
+ });
+ }
+ return Lists.newArrayList();
+ }
+
@Override
public void destroy() {
}
@@ -114,6 +151,15 @@ public class IsisSessionFilter implement
final HttpServletRequest httpRequest = (HttpServletRequest) request;
final HttpServletResponse httpResponse = (HttpServletResponse) response;
+ if(requestIsIgnoreExtension(filter, httpRequest)) {
+ try {
+ chain.doFilter(request, response);
+ return;
+ } finally {
+ closeSession();
+ }
+ }
+
// request is to logon page
if (requestToLogonPage(filter, httpRequest)) {
NO_SESSION_SINCE_REDIRECTING_TO_LOGON_PAGE.setOn(request);
@@ -160,6 +206,16 @@ public class IsisSessionFilter implement
}
}
+ private boolean requestIsIgnoreExtension(IsisSessionFilter filter, HttpServletRequest httpRequest) {
+ final String servletPath = httpRequest.getServletPath();
+ for (final Pattern extension : filter.ignoreExtensions) {
+ if(extension.matcher(servletPath).matches()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private boolean requestToLogonPage(IsisSessionFilter filter, HttpServletRequest httpRequest) {
return filter.logonPageIfNoSession != null &&
filter.logonPageIfNoSession.equals(httpRequest.getServletPath());