View Javadoc
1   /*
2    * $Id$
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  
23  package org.apache.struts.webapp.example2;
24  
25  
26  import jakarta.servlet.http.HttpServletRequest;
27  import jakarta.servlet.http.HttpServletResponse;
28  import jakarta.servlet.http.HttpSession;
29  
30  import org.apache.struts.action.Action;
31  import org.apache.struts.action.ActionForm;
32  import org.apache.struts.action.ActionForward;
33  import org.apache.struts.action.ActionMapping;
34  import org.apache.struts.apps.mailreader.dao.User;
35  import org.slf4j.Logger;
36  import org.slf4j.LoggerFactory;
37  
38  
39  /**
40   * Implementation of <strong>Action</strong> that processes a
41   * user logoff.
42   *
43   * @author Craig R. McClanahan
44   * @version $Rev$ $Date$
45   */
46  
47  public final class LogoffAction extends Action {
48      private static final long serialVersionUID = 8220048262143104600L;
49  
50  
51      // ----------------------------------------------------- Instance Variables
52  
53  
54      /**
55       * The {@code Log} instance for this class.
56       */
57      private final static Logger LOG =
58          LoggerFactory.getLogger(LogoffAction.class);
59  
60  
61      // --------------------------------------------------------- Public Methods
62  
63  
64      /**
65       * Process the specified HTTP request, and create the corresponding HTTP
66       * response (or forward to another web component that will create it).
67       * Return an <code>ActionForward</code> instance describing where and how
68       * control should be forwarded, or <code>null</code> if the response has
69       * already been completed.
70       *
71       * @param mapping The ActionMapping used to select this instance
72       * @param form The optional ActionForm bean for this request (if any)
73       * @param request The HTTP request we are processing
74       * @param response The HTTP response we are creating
75       *
76       * @exception Exception if business logic throws an exception
77       */
78      public ActionForward execute(ActionMapping mapping,
79                   ActionForm form,
80                   HttpServletRequest request,
81                   HttpServletResponse response)
82      throws Exception {
83  
84      // Extract attributes we will need
85      HttpSession session = request.getSession();
86      User user = (User) session.getAttribute(Constants.USER_KEY);
87  
88      // Process this user logoff
89      if (user != null) {
90          LOG.debug("LogoffAction: User '{}' logged off in session {}",
91              user.getUsername(), session.getId());
92      } else {
93          LOG.debug("LogoffActon: User logged off in session {}",
94              session.getId());
95      }
96      session.removeAttribute(Constants.SUBSCRIPTION_KEY);
97      session.removeAttribute(Constants.USER_KEY);
98      session.invalidate();
99  
100     // Forward control to the specified success URI
101     return (mapping.findForward("success"));
102 
103     }
104 }