Author: sohil.shah(a)jboss.com
Date: 2010-04-05 13:59:36 -0400 (Mon, 05 Apr 2010)
New Revision: 2475
Added:
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/AbstractLogoutFilter.java
Modified:
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/JOSSOLogoutFilter.java
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/OpenSSOLogoutFilter.java
Log:
GTNPORTAL-996 - GateIn+JOSSO integration: Problems with logout
Added:
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/AbstractLogoutFilter.java
===================================================================
---
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/AbstractLogoutFilter.java
(rev 0)
+++
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/AbstractLogoutFilter.java 2010-04-05
17:59:36 UTC (rev 2475)
@@ -0,0 +1,92 @@
+/*
+ * JBoss, a division of Red Hat
+ * Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.gatein.sso.agent.filter;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author <a href="mailto:sshah@redhat.com">Sohil Shah</a>
+ */
+public abstract class AbstractLogoutFilter implements Filter
+{
+ protected String logoutUrl;
+
+ public void init(FilterConfig config) throws ServletException
+ {
+ this.logoutUrl = config.getInitParameter("LOGOUT_URL");
+ }
+
+ public void destroy()
+ {
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException
+ {
+ HttpServletRequest httpRequest = (HttpServletRequest) request;
+ HttpServletResponse httpResponse = (HttpServletResponse) response;
+
+ boolean isLogoutInProgress = this.isLogoutInProgress(httpRequest);
+
+ if (isLogoutInProgress)
+ {
+
+ if (httpRequest.getSession().getAttribute("SSO_LOGOUT_FLAG") == null)
+ {
+ httpRequest.getSession().setAttribute("SSO_LOGOUT_FLAG", Boolean.TRUE);
+
+ httpResponse.sendRedirect(this.getRedirectUrl(httpRequest));
+ return;
+ }
+ else
+ {
+ // clear the LOGOUT flag
+ httpRequest.getSession().removeAttribute("SSO_LOGOUT_FLAG");
+ }
+ }
+
+ chain.doFilter(request, response);
+ }
+
+ private boolean isLogoutInProgress(HttpServletRequest request)
+ {
+ String action = request.getParameter("portal:action");
+
+ if (action != null && action.equals("Logout"))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ protected abstract String getRedirectUrl(HttpServletRequest httpRequest);
+}
Modified:
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/JOSSOLogoutFilter.java
===================================================================
---
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/JOSSOLogoutFilter.java 2010-04-05
16:39:25 UTC (rev 2474)
+++
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/JOSSOLogoutFilter.java 2010-04-05
17:59:36 UTC (rev 2475)
@@ -21,17 +21,8 @@
*/
package org.gatein.sso.agent.filter;
-import java.io.IOException;
import java.net.URLEncoder;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
//Works for GateIn Portal Logout URL =
{AnyURL}?portal:componentId=UIPortal&portal:action=Logout
@@ -45,7 +36,7 @@
*
<filter-class>org.gatein.sso.agent.filter.JOSSOLogoutFilter</filter-class>
* <init-param>
* <!-- This should point to your JOSSO authentication server -->
- * <param-name>JOSSO_LOGOUT_URL</param-name>
+ * <param-name>LOGOUT_URL</param-name>
*
<param-value>http://localhost:8888/josso/signon/logout.do</param-value>
* </init-param>
* </filter>
@@ -63,56 +54,23 @@
/**
* @author <a href="mailto:sshah@redhat.com">Sohil Shah</a>
*/
-public class JOSSOLogoutFilter implements Filter
+public class JOSSOLogoutFilter extends AbstractLogoutFilter
{
- private String jossoLogoutUrl;
-
- public void init(FilterConfig config) throws ServletException
+ protected String getRedirectUrl(HttpServletRequest httpRequest)
{
- this.jossoLogoutUrl = config.getInitParameter("JOSSO_LOGOUT_URL");
- }
-
- public void destroy()
- {
- }
-
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException
- {
- HttpServletRequest httpRequest = (HttpServletRequest)request;
- HttpServletResponse httpResponse = (HttpServletResponse)response;
-
- boolean isLogoutInProgress = this.isLogoutInProgress(httpRequest);
-
- if(isLogoutInProgress)
+ try
{
-
- if(httpRequest.getSession().getAttribute("SSO_LOGOUT_FLAG") == null)
- {
- httpRequest.getSession().setAttribute("SSO_LOGOUT_FLAG", Boolean.TRUE);
- String parameters =
URLEncoder.encode("portal:componentId=UIPortal&portal:action=Logout",
"UTF-8");
- httpResponse.sendRedirect(jossoLogoutUrl+"?josso_back_to="+httpRequest.getRequestURL()+"?"+parameters);
- return;
- }
- else
- {
- //clear the LOGOUT flag
- httpRequest.getSession().removeAttribute("SSO_LOGOUT_FLAG");
- }
+ String parameters = URLEncoder.encode(
+ "portal:componentId=UIPortal&portal:action=Logout",
"UTF-8");
+
+ String redirectUrl = this.logoutUrl + "?josso_back_to="
+ + httpRequest.getRequestURL() + "?" + parameters;
+
+ return redirectUrl;
}
-
- chain.doFilter(request, response);
- }
-
- private boolean isLogoutInProgress(HttpServletRequest request)
- {
- String action = request.getParameter("portal:action");
-
- if(action != null && action.equals("Logout"))
+ catch(Exception e)
{
- return true;
+ throw new RuntimeException(e);
}
-
- return false;
}
}
Modified:
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/OpenSSOLogoutFilter.java
===================================================================
---
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/OpenSSOLogoutFilter.java 2010-04-05
16:39:25 UTC (rev 2474)
+++
components/sso/trunk/agent/src/main/java/org/gatein/sso/agent/filter/OpenSSOLogoutFilter.java 2010-04-05
17:59:36 UTC (rev 2475)
@@ -21,17 +21,8 @@
*/
package org.gatein.sso.agent.filter;
-import java.io.IOException;
import java.net.URLEncoder;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
//Works for GateIn Portal Logout URL =
{AnyURL}?portal:componentId=UIPortal&portal:action=Logout
@@ -45,13 +36,13 @@
*
<filter-class>org.gatein.sso.agent.filter.OpenSSOLogoutFilter</filter-class>
* <init-param>
* <!-- This should point to your OpenSSO authentication server -->
- * <param-name>OPENSSO_LOGOUT_URL</param-name>
+ * <param-name>LOGOUT_URL</param-name>
* <param-value>http://localhost:8888/opensso/UI/Logout</param-value>
* </init-param>
* </filter>
*
* <filter-mapping>
- * <filter-name>JOSSOLogoutFilter</filter-name>
+ * <filter-name>OpenSSOLogoutFilter</filter-name>
* <url-pattern>/*</url-pattern>
* </filter-mapping>
*
@@ -63,56 +54,22 @@
/**
* @author <a href="mailto:sshah@redhat.com">Sohil Shah</a>
*/
-public class OpenSSOLogoutFilter implements Filter
-{
- private String logoutUrl;
-
- public void init(FilterConfig config) throws ServletException
+public class OpenSSOLogoutFilter extends AbstractLogoutFilter
+{
+ protected String getRedirectUrl(HttpServletRequest httpRequest)
{
- this.logoutUrl = config.getInitParameter("OPENSSO_LOGOUT_URL");
- }
-
- public void destroy()
- {
- }
-
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException
- {
- HttpServletRequest httpRequest = (HttpServletRequest)request;
- HttpServletResponse httpResponse = (HttpServletResponse)response;
-
- boolean isLogoutInProgress = this.isLogoutInProgress(httpRequest);
-
- if(isLogoutInProgress)
+ try
{
-
- if(httpRequest.getSession().getAttribute("SSO_LOGOUT_FLAG") == null)
- {
- httpRequest.getSession().setAttribute("SSO_LOGOUT_FLAG", Boolean.TRUE);
- String parameters =
URLEncoder.encode("portal:componentId=UIPortal&portal:action=Logout",
"UTF-8");
- httpResponse.sendRedirect(this.logoutUrl+"?realm=gatein&goto="+httpRequest.getRequestURL()+"?"+parameters);
- return;
- }
- else
- {
- //clear the LOGOUT flag
- httpRequest.getSession().removeAttribute("SSO_LOGOUT_FLAG");
- }
+ String parameters = URLEncoder.encode(
+ "portal:componentId=UIPortal&portal:action=Logout",
"UTF-8");
+
+ String redirectUrl =
this.logoutUrl+"?realm=gatein&goto="+httpRequest.getRequestURL()+"?"+parameters;
+
+ return redirectUrl;
}
-
- chain.doFilter(request, response);
- }
-
- private boolean isLogoutInProgress(HttpServletRequest request)
- {
- String action = request.getParameter("portal:action");
-
- if(action != null && action.equals("Logout"))
+ catch(Exception e)
{
- return true;
+ throw new RuntimeException(e);
}
-
- return false;
}
}