001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019
020 package org.apache.myfaces.tobago.webapp;
021
022 /*
023 * Created 25.10.2004 17:57:53.
024 * $Id: LogoutActionListener.java 1368577 2012-08-02 16:20:31Z lofwyr $
025 */
026
027 import org.apache.commons.logging.Log;
028 import org.apache.commons.logging.LogFactory;
029
030 import javax.faces.FacesException;
031 import javax.faces.context.ExternalContext;
032 import javax.faces.context.FacesContext;
033 import javax.faces.event.AbortProcessingException;
034 import javax.faces.event.ActionEvent;
035 import javax.faces.event.ActionListener;
036 import javax.servlet.http.HttpSession;
037 import java.io.IOException;
038
039 public class LogoutActionListener implements ActionListener {
040
041 private static final Log LOG = LogFactory.getLog(LogoutActionListener.class);
042
043 public void processAction(ActionEvent event) throws AbortProcessingException {
044 FacesContext facesContext = FacesContext.getCurrentInstance();
045 ExternalContext externalContext = facesContext.getExternalContext();
046 Object session = externalContext.getSession(false);
047 if (session != null) {
048 if (session instanceof HttpSession) {
049 ((HttpSession) session).invalidate();
050 }
051 // TODO: PortletRequest ??
052 }
053 String forward = externalContext.getRequestContextPath() + "/";
054 try {
055 externalContext.redirect(forward);
056 } catch (IOException e) {
057 LOG.error("", e);
058 // TODO: may do error handling
059 throw new FacesException("Can't redirect to '" + forward + "'");
060 }
061 facesContext.responseComplete();
062 }
063
064 }