CAS SingleSignOutFilter problems

Steve Podell spodell at iii.com
Wed Apr 30 16:44:26 EDT 2008


Hi Axel,
   This worked perfectly!
Thanks,
Steve

Axel Mendoza Pupo wrote:
> I found this filter in the Spring forum to receive the serviceId, I work
> with acegi 1.04 with some modifications to store the serviced and with
> the Updater facade I can expire the session having the serviced. If you
> use the Jasig client then inject the session map, get the session with
> serviceId and invalidate. In CAS 3.2.1 the POST request to logout is
> done sucefully. Note that if you use Acegi this filter most be before
> AutenticationProcessingFilter to receive the request first, the same to
> any filter who process the service url.
>
> public class CASSamlLogoutFilter implements Filter, InitializingBean{
>
> 	private String filterProcessesUrl;
> 	private Updater updater;
>
> 	public void setUpdater(Updater updater) {
> 		this.updater = updater;
> 	}
>
> 	public void setFilterProcessesUrl( String s )
> 	{
> 		this.filterProcessesUrl = s;
> 	}
>
> 	public void afterPropertiesSet() throws Exception
> 	{
> 	
> Assert.hasLength(this.filterProcessesUrl,"filterProcessesUrl must be
> specified");
> 		Assert.notNull(updater, "updater most be set");
> 	}
> 	
> 	public void init( FilterConfig config ) throws ServletException
> { }
> 	
> 	public void destroy() { }
> 	
> 	public void doFilter(
> 		    ServletRequest request, ServletResponse response,
> FilterChain chain )
> 		  throws ServletException, IOException
> 		  {
> 		    if(! (request instanceof HttpServletRequest) )
> 		    {
> 		      throw new ServletException("Can only process
> HttpServletRequest");
> 		    }
>
> 		    if(! (response instanceof HttpServletResponse) )
> 		    {
> 		      throw new ServletException("Can only process
> HttpServletResponse");
> 		    }
>
> 		    HttpServletRequest httpRequest =
> (HttpServletRequest) request;
> 		    HttpServletResponse httpResponse =
> (HttpServletResponse) response;
>
> 		    if( processLogout(httpRequest) )
> 		    {
> 		      return;
> 		    }
>
> 		    chain.doFilter(request, response);
> 		  }
>
> 		  protected boolean processLogout( HttpServletRequest
> request )
> 		  throws IOException
> 		  {
> 		    if(! request.getMethod().equalsIgnoreCase("POST") )
> 		    {
> 		      return false;
> 		    }
>
> 		    String uri = request.getRequestURI();
>
> 		    // strip everything after the first semi-colon
> 		    int pathParamIndex = uri.indexOf(';');
> 		    if( pathParamIndex > 0 )
> 		    {
> 		      uri = uri.substring(0, pathParamIndex);
> 		    }
>
> 		    if(! uri.endsWith(request.getContextPath() +
> this.filterProcessesUrl) )
> 		    {
> 		      return false;
> 		    }
>
> 		    String sTicket = null;
>
> 		    BufferedReader reader = request.getReader();
>
> 		    String line = null;
> 		    while( (line = reader.readLine()) != null )
> 		    {//URLDecoder.decode(arg0)
> 		      if( line.startsWith("logoutRequest=") )
> 		      {
> 		        int start =
> line.indexOf("%3Csamlp%3ASessionIndex%3E");
> 		        int end =
> line.indexOf("%3C%2Fsamlp%3ASessionIndex%3E");
>
> 		        if( start > -1 && start < end )
> 		        {
> 		          sTicket = line.substring(
> 		            start +
> "%3Csamlp%3ASessionIndex%3E".length(),
> 		            end);
> 		        }
> 		      }
> 		    }
> 		    
> 		    reader.close();
> 		    
> 		    if( sTicket != null )
> 		    {
> 		    	updater.expirarSession(sTicket);
> 		    }
>
> 		    return true;
> 		  }
>
> }
> _______________________________________________
> Yale CAS mailing list
> cas at tp.its.yale.edu
> http://tp.its.yale.edu/mailman/listinfo/cas
>
>
>
>   



More information about the cas mailing list