From do-not-reply at jboss.org Fri Mar 11 10:48:16 2011
Content-Type: multipart/mixed; boundary="===============3300337737910960057=="
MIME-Version: 1.0
From: do-not-reply at jboss.org
To: gatein-commits at lists.jboss.org
Subject: [gatein-commits] gatein SVN: r6010 - in components/wci/trunk:
jboss/jboss6/src/main/java/org/gatein/wci/jboss and 9 other directories.
Date: Fri, 11 Mar 2011 10:48:16 -0500
Message-ID: <201103111548.p2BFmG8h010174@svn01.web.mwc.hst.phx2.redhat.com>
--===============3300337737910960057==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Author: mstruk
Date: 2011-03-11 10:48:16 -0500 (Fri, 11 Mar 2011)
New Revision: 6010
Added:
components/wci/trunk/wci/src/main/java/org/gatein/wci/ServletContainerVi=
sitor.java
Modified:
components/wci/trunk/
components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB6=
ContainerServlet.java
components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB6=
ServletContainerContext.java
components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB6=
WebAppContext.java
components/wci/trunk/jetty/src/main/java/org/gatein/wci/jetty/Jetty6WebA=
ppContext.java
components/wci/trunk/test/core/src/main/java/org/gatein/wci/container/We=
bAppContextImpl.java
components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat/=
TC6ContainerServlet.java
components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat/=
TC6ServletContainerContext.java
components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat/=
TC6WebAppContext.java
components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat/=
TC7ContainerServlet.java
components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat/=
TC7ServletContainerContext.java
components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat/=
TC7WebAppContext.java
components/wci/trunk/wci/src/main/java/org/gatein/wci/ServletContainer.j=
ava
components/wci/trunk/wci/src/main/java/org/gatein/wci/WebApp.java
components/wci/trunk/wci/src/main/java/org/gatein/wci/authentication/Gen=
ericAuthentication.java
components/wci/trunk/wci/src/main/java/org/gatein/wci/impl/DefaultServle=
tContainer.java
components/wci/trunk/wci/src/main/java/org/gatein/wci/impl/generic/Gener=
icWebAppContext.java
components/wci/trunk/wci/src/main/java/org/gatein/wci/spi/WebAppContext.=
java
Log:
GTNPORTAL-1706 session cleanup after logout
Property changes on: components/wci/trunk
___________________________________________________________________
Added: svn:mergeinfo
+ /components/wci/branches/logout:5894-6009
Modified: components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jb=
oss/JB6ContainerServlet.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB=
6ContainerServlet.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB=
6ContainerServlet.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -29,6 +29,8 @@
import org.apache.catalina.ContainerServlet;
import org.apache.catalina.Engine;
import org.apache.catalina.Wrapper;
+import org.gatein.common.logging.Logger;
+import org.gatein.common.logging.LoggerFactory;
=
/**
* @author Matt Wringe
@@ -36,6 +38,11 @@
*/
public class JB6ContainerServlet extends HttpServlet implements ContainerS=
ervlet
{
+ private static final Logger log =3D LoggerFactory.getLogger(JB6Containe=
rServlet.class);
+
+ /** Servlet context init parameter name that can be used to turn off cr=
oss-context logout */
+ private static final String CROSS_CONTEXT_LOGOUT_KEY =3D "org.gatein.wc=
i.cross_context_logout";
+
/** . */
private Wrapper wrapper;
=
@@ -107,6 +114,7 @@
{
Engine engine =3D (Engine) container;
containerContext =3D new JB6ServletContainerContext(engine);
+ containerContext.setCrossContextLogout(getCrossContextLogoutCo=
nfig());
containerContext.start();
break;
}
@@ -123,4 +131,21 @@
containerContext =3D null;
}
}
+
+ private boolean getCrossContextLogoutConfig()
+ {
+ String val =3D getServletContext().getInitParameter(CROSS_CONTEXT_LO=
GOUT_KEY);
+ if (val =3D=3D null || Boolean.valueOf(val))
+ {
+ return true;
+ }
+
+ if (!"false".equalsIgnoreCase(val))
+ {
+ log.warn("Context init param " + CROSS_CONTEXT_LOGOUT_KEY + " val=
ue is invalid: " + val + " - falling back to: false");
+ }
+
+ log.info("Cross-context session invalidation on logout disabled");
+ return false;
+ }
}
Modified: components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jb=
oss/JB6ServletContainerContext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB=
6ServletContainerContext.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB=
6ServletContainerContext.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -35,6 +35,8 @@
import org.gatein.common.logging.Logger;
import org.gatein.common.logging.LoggerFactory;
import org.gatein.wci.RequestDispatchCallback;
+import org.gatein.wci.ServletContainerVisitor;
+import org.gatein.wci.WebApp;
import org.gatein.wci.authentication.GenericAuthentication;
import org.gatein.wci.authentication.TicketService;
import org.gatein.wci.command.CommandDispatcher;
@@ -46,6 +48,7 @@
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@@ -75,8 +78,8 @@
/** . */
private Registration registration;
=
- /** . */
- private GenericAuthentication authentication =3D new GenericAuthenticat=
ion();
+ /** Perform cross-context session invalidation on logout, or not */
+ private boolean crossContextLogout =3D true;
=
public JB6ServletContainerContext(Engine engine)
{
@@ -99,6 +102,11 @@
this.registration =3D null;
}
=
+ public void setCrossContextLogout(boolean val)
+ {
+ crossContextLogout =3D val;
+ }
+
public void login(HttpServletRequest request, HttpServletResponse respo=
nse, Credentials credentials, long validityMillis) throws ServletException,=
IOException
{
login(request, response, credentials, validityMillis, null);
@@ -133,10 +141,26 @@
}
}
=
+
public void logout(HttpServletRequest request, HttpServletResponse resp=
onse) throws ServletException
{
+ HttpSession sess =3D request.getSession(false);
request.logout();
- request.getSession().invalidate();
+
+ if (sess =3D=3D null)
+ return;
+
+ if (!crossContextLogout)
+ return;
+
+ final String sessId =3D sess.getId();
+ DefaultServletContainerFactory.getInstance().getServletContainer().v=
isit(new ServletContainerVisitor()
+ {
+ public void accept(WebApp webApp)
+ {
+ webApp.invalidateSession(sessId);
+ }
+ });
}
=
public String getContainerInfo()
Modified: components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jb=
oss/JB6WebAppContext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB=
6WebAppContext.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/jboss/jboss6/src/main/java/org/gatein/wci/jboss/JB=
6WebAppContext.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -28,6 +28,8 @@
import javax.servlet.ServletContext;
=
import org.apache.catalina.Context;
+import org.apache.catalina.Manager;
+import org.apache.catalina.Session;
import org.apache.catalina.Wrapper;
import org.gatein.wci.command.CommandServlet;
import org.gatein.wci.spi.WebAppContext;
@@ -125,4 +127,25 @@
{
return false;
}
+
+ public boolean invalidateSession(String sessId)
+ {
+ Manager mgr =3D context.getManager();
+ if (mgr !=3D null)
+ {
+ try
+ {
+ Session sess =3D mgr.findSession(sessId);
+ if (sess !=3D null)
+ {
+ sess.expire();
+ return true;
+ }
+ }
+ catch (IOException ignored)
+ {
+ }
+ }
+ return false;
+ }
}
Modified: components/wci/trunk/jetty/src/main/java/org/gatein/wci/jetty/Jet=
ty6WebAppContext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/jetty/src/main/java/org/gatein/wci/jetty/Jetty6Web=
AppContext.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/jetty/src/main/java/org/gatein/wci/jetty/Jetty6Web=
AppContext.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -119,4 +119,9 @@
{
return false;
}
+
+ public boolean invalidateSession(String sessId)
+ {
+ return false;
+ }
}
Modified: components/wci/trunk/test/core/src/main/java/org/gatein/wci/conta=
iner/WebAppContextImpl.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/test/core/src/main/java/org/gatein/wci/container/W=
ebAppContextImpl.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/test/core/src/main/java/org/gatein/wci/container/W=
ebAppContextImpl.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -76,4 +76,9 @@
{
throw new UnsupportedOperationException();
}
+
+ public boolean invalidateSession(String sessId)
+ {
+ return false;
+ }
}
Modified: components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/=
tomcat/TC6ContainerServlet.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat=
/TC6ContainerServlet.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat=
/TC6ContainerServlet.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -26,6 +26,8 @@
import org.apache.catalina.Wrapper;
import org.apache.catalina.Container;
import org.apache.catalina.Engine;
+import org.gatein.common.logging.Logger;
+import org.gatein.common.logging.LoggerFactory;
=
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
@@ -36,7 +38,11 @@
*/
public class TC6ContainerServlet extends HttpServlet implements ContainerS=
ervlet
{
+ private static final Logger log =3D LoggerFactory.getLogger(TC6Containe=
rServlet.class);
=
+ /** Servlet context init parameter name that can be used to turn off cr=
oss-context logout */
+ private static final String CROSS_CONTEXT_LOGOUT_KEY =3D "org.gatein.wc=
i.cross_context_logout";
+
/** . */
private Wrapper wrapper;
=
@@ -108,6 +114,7 @@
{
Engine engine =3D (Engine)container;
containerContext =3D new TC6ServletContainerContext(engine);
+ containerContext.setCrossContextLogout(getCrossContextLogoutCo=
nfig());
containerContext.start();
break;
}
@@ -124,4 +131,16 @@
containerContext =3D null;
}
}
+
+ private boolean getCrossContextLogoutConfig() {
+ String val =3D getServletContext().getInitParameter(CROSS_CONTEXT_L=
OGOUT_KEY);
+ if (val =3D=3D null || Boolean.valueOf(val))
+ return true;
+
+ if (!"false".equalsIgnoreCase(val))
+ log.warn("Context init param " + CROSS_CONTEXT_LOGOUT_KEY + " va=
lue is invalid: " + val + " - falling back to: false");
+
+ log.info("Cross-context session invalidation on logout disabled");
+ return false;
+ }
}
Modified: components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/=
tomcat/TC6ServletContainerContext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat=
/TC6ServletContainerContext.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat=
/TC6ServletContainerContext.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -34,6 +34,9 @@
import org.gatein.common.logging.Logger;
import org.gatein.common.logging.LoggerFactory;
import org.gatein.wci.RequestDispatchCallback;
+import org.gatein.wci.ServletContainerVisitor;
+import org.gatein.wci.WebApp;
+
import org.gatein.wci.authentication.GenericAuthentication;
import org.gatein.wci.command.CommandDispatcher;
import org.gatein.wci.impl.DefaultServletContainerFactory;
@@ -45,6 +48,7 @@
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@@ -74,6 +78,9 @@
/** . */
private Registration registration;
=
+ /** Perform cross-context session invalidation on logout, or not */
+ private boolean crossContextLogout =3D true;
+
/** . */
private GenericAuthentication authentication =3D new GenericAuthenticat=
ion();
=
@@ -102,6 +109,11 @@
this.registration =3D null;
}
=
+ public void setCrossContextLogout(boolean val)
+ {
+ crossContextLogout =3D val;
+ }
+
public void login(HttpServletRequest request, HttpServletResponse respo=
nse, Credentials credentials, long validityMillis) throws IOException
{
authentication.login(credentials, request, response, validityMillis);
@@ -112,9 +124,26 @@
authentication.login(credentials, request, response, validityMillis,=
initialURI);
}
=
- public void logout(HttpServletRequest request, HttpServletResponse resp=
onse) throws ServletException
+ public void logout(HttpServletRequest request, HttpServletResponse resp=
onse)
{
- authentication.logout(request, response);
+ HttpSession sess =3D request.getSession(false);
+
+ if (sess =3D=3D null)
+ return;
+
+ sess.invalidate();
+
+ if (!crossContextLogout)
+ return;
+
+ final String sessId =3D sess.getId();
+ DefaultServletContainerFactory.getInstance().getServletContainer().v=
isit(new ServletContainerVisitor()
+ {
+ public void accept(WebApp webApp)
+ {
+ webApp.invalidateSession(sessId);
+ }
+ });
}
=
public String getContainerInfo()
Modified: components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/=
tomcat/TC6WebAppContext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat=
/TC6WebAppContext.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/tomcat/tomcat6/src/main/java/org/gatein/wci/tomcat=
/TC6WebAppContext.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -22,6 +22,8 @@
*************************************************************************=
*****/
package org.gatein.wci.tomcat;
=
+import org.apache.catalina.Manager;
+import org.apache.catalina.Session;
import org.w3c.dom.Document;
import org.apache.catalina.Context;
import org.apache.catalina.Wrapper;
@@ -124,4 +126,25 @@
{
return false;
}
+
+ public boolean invalidateSession(String sessId)
+ {
+ Manager mgr =3D context.getManager();
+ if (mgr !=3D null)
+ {
+ try
+ {
+ Session sess =3D mgr.findSession(sessId);
+ if (sess !=3D null)
+ {
+ sess.expire();
+ return true;
+ }
+ }
+ catch (IOException ignored)
+ {
+ }
+ }
+ return false;
+ }
}
Modified: components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/=
tomcat/TC7ContainerServlet.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat=
/TC7ContainerServlet.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat=
/TC7ContainerServlet.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -26,6 +26,8 @@
import org.apache.catalina.ContainerServlet;
import org.apache.catalina.Engine;
import org.apache.catalina.Wrapper;
+import org.gatein.common.logging.Logger;
+import org.gatein.common.logging.LoggerFactory;
=
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -36,7 +38,11 @@
*/
public class TC7ContainerServlet extends HttpServlet implements ContainerS=
ervlet
{
+ private static final Logger log =3D LoggerFactory.getLogger(TC7Containe=
rServlet.class);
=
+ /** Servlet context init parameter name that can be used to turn off cr=
oss-context logout */
+ private static final String CROSS_CONTEXT_LOGOUT_KEY =3D "org.gatein.wc=
i.cross_context_logout";
+
/** . */
private Wrapper wrapper;
=
@@ -108,6 +114,7 @@
{
Engine engine =3D (Engine)container;
containerContext =3D new TC7ServletContainerContext(engine);
+ containerContext.setCrossContextLogout(getCrossContextLogoutCo=
nfig());
containerContext.start();
break;
}
@@ -124,4 +131,16 @@
containerContext =3D null;
}
}
+
+ private boolean getCrossContextLogoutConfig() {
+ String val =3D getServletContext().getInitParameter(CROSS_CONTEXT_LO=
GOUT_KEY);
+ if (val =3D=3D null || Boolean.valueOf(val))
+ return true;
+
+ if (!"false".equalsIgnoreCase(val))
+ log.warn("Context init param " + CROSS_CONTEXT_LOGOUT_KEY + " val=
ue is invalid: " + val + " - falling back to: false");
+
+ log.info("Cross-context session invalidation on logout disabled");
+ return false;
+ }
}
Modified: components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/=
tomcat/TC7ServletContainerContext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat=
/TC7ServletContainerContext.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat=
/TC7ServletContainerContext.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -36,7 +36,11 @@
import org.gatein.common.logging.Logger;
import org.gatein.common.logging.LoggerFactory;
import org.gatein.wci.RequestDispatchCallback;
+import org.gatein.wci.ServletContainerVisitor;
+import org.gatein.wci.WebApp;
+
import org.gatein.wci.authentication.GenericAuthentication;
+
import org.gatein.wci.authentication.TicketService;
import org.gatein.wci.command.CommandDispatcher;
import org.gatein.wci.impl.DefaultServletContainerFactory;
@@ -47,6 +51,7 @@
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@@ -76,6 +81,9 @@
/** . */
private Registration registration;
=
+ /** Perform cross-context session invalidation on logout, or not */
+ private boolean crossContextLogout =3D true;
+
public TC7ServletContainerContext(Engine engine)
{
this.engine =3D engine;
@@ -101,6 +109,11 @@
this.registration =3D null;
}
=
+ public void setCrossContextLogout(boolean val)
+ {
+ crossContextLogout =3D val;
+ }
+
public void login(HttpServletRequest request, HttpServletResponse respo=
nse, Credentials credentials, long validityMillis) throws ServletException,=
IOException
{
login(request, response, credentials, validityMillis, null);
@@ -135,8 +148,23 @@
=
public void logout(HttpServletRequest request, HttpServletResponse resp=
onse) throws ServletException
{
+ HttpSession sess =3D request.getSession(false);
request.logout();
- request.getSession().invalidate();
+
+ if (sess =3D=3D null)
+ return;
+
+ if (!crossContextLogout)
+ return;
+
+ final String sessId =3D sess.getId();
+ DefaultServletContainerFactory.getInstance().getServletContainer().v=
isit(new ServletContainerVisitor()
+ {
+ public void accept(WebApp webApp)
+ {
+ webApp.invalidateSession(sessId);
+ }
+ });
}
=
public String getContainerInfo()
Modified: components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/=
tomcat/TC7WebAppContext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat=
/TC7WebAppContext.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/tomcat/tomcat7/src/main/java/org/gatein/wci/tomcat=
/TC7WebAppContext.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -23,6 +23,8 @@
package org.gatein.wci.tomcat;
=
import org.apache.catalina.Context;
+import org.apache.catalina.Manager;
+import org.apache.catalina.Session;
import org.apache.catalina.Wrapper;
import org.gatein.wci.command.CommandServlet;
import org.gatein.wci.spi.WebAppContext;
@@ -124,4 +126,25 @@
{
return false;
}
+
+ public boolean invalidateSession(String sessId)
+ {
+ Manager mgr =3D context.getManager();
+ if (mgr !=3D null)
+ {
+ try
+ {
+ Session sess =3D mgr.findSession(sessId);
+ if (sess !=3D null)
+ {
+ sess.expire();
+ return true;
+ }
+ }
+ catch (IOException ignored)
+ {
+ }
+ }
+ return false;
+ }
}
Modified: components/wci/trunk/wci/src/main/java/org/gatein/wci/ServletCont=
ainer.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/wci/src/main/java/org/gatein/wci/ServletContainer.=
java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/wci/src/main/java/org/gatein/wci/ServletContainer.=
java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -145,4 +145,11 @@
* @return the string containing at least name and version number
*/
public String getContainerInfo();
+ =
+ /**
+ * Visit the registered WebApps
+ *
+ * @param visitor ServletContainerVisitor instance
+ */
+ void visit(ServletContainerVisitor visitor); =
}
Added: components/wci/trunk/wci/src/main/java/org/gatein/wci/ServletContain=
erVisitor.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/wci/src/main/java/org/gatein/wci/ServletContainerV=
isitor.java (rev 0)
+++ components/wci/trunk/wci/src/main/java/org/gatein/wci/ServletContainerV=
isitor.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -0,0 +1,14 @@
+package org.gatein.wci;
+
+/**
+ * @author Marko Strukelj
+ */
+public interface ServletContainerVisitor
+{
+ /**
+ * During visitation get reference to current WebApp
+ *
+ * @param webApp Currently visited WebApp
+ */
+ public void accept(WebApp webApp);
+}
Modified: components/wci/trunk/wci/src/main/java/org/gatein/wci/WebApp.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/wci/src/main/java/org/gatein/wci/WebApp.java 2011-=
03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/wci/src/main/java/org/gatein/wci/WebApp.java 2011-=
03-11 15:48:16 UTC (rev 6010)
@@ -72,4 +72,12 @@
* @throws IOException if the file cannot be created
*/
boolean importFile(String parentDirRelativePath, String name, InputStre=
am source, boolean overwrite) throws IOException;
+
+ /**
+ * Invalidate session for the specified id.
+ *
+ * @param sessId Session id
+ * @return true if session was found, false otherwise
+ */
+ public boolean invalidateSession(String sessId);
}
Modified: components/wci/trunk/wci/src/main/java/org/gatein/wci/authenticat=
ion/GenericAuthentication.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/wci/src/main/java/org/gatein/wci/authentication/Ge=
nericAuthentication.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/wci/src/main/java/org/gatein/wci/authentication/Ge=
nericAuthentication.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -19,8 +19,6 @@
=
package org.gatein.wci.authentication;
=
-import org.gatein.wci.impl.DefaultServletContainer;
-import org.gatein.wci.impl.DefaultServletContainerFactory;
import org.gatein.wci.security.Credentials;
=
import javax.servlet.http.HttpServletRequest;
Modified: components/wci/trunk/wci/src/main/java/org/gatein/wci/impl/Defaul=
tServletContainer.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/wci/src/main/java/org/gatein/wci/impl/DefaultServl=
etContainer.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/wci/src/main/java/org/gatein/wci/impl/DefaultServl=
etContainer.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -22,6 +22,7 @@
*************************************************************************=
*****/
package org.gatein.wci.impl;
=
+import org.gatein.wci.ServletContainerVisitor;
import org.gatein.wci.authentication.AuthenticationEvent;
import org.gatein.wci.authentication.AuthenticationListener;
import org.gatein.wci.security.Credentials;
@@ -270,6 +271,17 @@
return registration.context.include(targetServletContext, request, r=
esponse, callback, handback);
}
=
+ public void visit(ServletContainerVisitor visitor)
+ {
+ synchronized (lock)
+ {
+ for (WebApp webApp: webAppMap.values())
+ {
+ visitor.accept(webApp);
+ }
+ }
+ }
+
public static enum EventType {
LOGIN, LOGOUT
}
@@ -433,5 +445,10 @@
{
return context.importFile(parentDirRelativePath, name, source, ov=
erwrite);
}
+
+ public boolean invalidateSession(String sessId)
+ {
+ return context.invalidateSession(sessId);
+ }
}
}
\ No newline at end of file
Modified: components/wci/trunk/wci/src/main/java/org/gatein/wci/impl/generi=
c/GenericWebAppContext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/wci/src/main/java/org/gatein/wci/impl/generic/Gene=
ricWebAppContext.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/wci/src/main/java/org/gatein/wci/impl/generic/Gene=
ricWebAppContext.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -78,4 +78,9 @@
{
return false;
}
+
+ public boolean invalidateSession(String sessId)
+ {
+ return false;
+ }
}
\ No newline at end of file
Modified: components/wci/trunk/wci/src/main/java/org/gatein/wci/spi/WebAppC=
ontext.java
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- components/wci/trunk/wci/src/main/java/org/gatein/wci/spi/WebAppContext=
.java 2011-03-11 14:27:41 UTC (rev 6009)
+++ components/wci/trunk/wci/src/main/java/org/gatein/wci/spi/WebAppContext=
.java 2011-03-11 15:48:16 UTC (rev 6010)
@@ -86,4 +86,12 @@
* @throws java.io.IOException if the file cannot be created
*/
boolean importFile(String parentDirRelativePath, String name, InputStre=
am source, boolean overwrite) throws IOException;
+
+ /**
+ * Invalidate session for the specified id.
+ *
+ * @param sessId Session id
+ * @return true if session was found, false otherwise
+ */
+ boolean invalidateSession(String sessId);
}
--===============3300337737910960057==--