View Javadoc
1   /*
2    * $Source$
3    * $Revision$
4    *
5    * Copyright (C) 2000 William Chesters
6    *
7    * Part of Melati (http://melati.org), a framework for the rapid
8    * development of clean, maintainable web applications.
9    *
10   * Melati is free software; Permission is granted to copy, distribute
11   * and/or modify this software under the terms either:
12   *
13   * a) the GNU General Public License as published by the Free Software
14   *    Foundation; either version 2 of the License, or (at your option)
15   *    any later version,
16   *
17   *    or
18   *
19   * b) any version of the Melati Software License, as published
20   *    at http://melati.org
21   *
22   * You should have received a copy of the GNU General Public License and
23   * the Melati Software License along with this program;
24   * if not, write to the Free Software Foundation, Inc.,
25   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26   * GNU General Public License and visit http://melati.org to obtain the
27   * Melati Software License.
28   *
29   * Feel free to contact the Developers of Melati (http://melati.org),
30   * if you would like to work out a different arrangement than the options
31   * outlined here.  It is our intention to allow Melati to be used by as
32   * wide an audience as possible.
33   *
34   * This program is distributed in the hope that it will be useful,
35   * but WITHOUT ANY WARRANTY; without even the implied warranty of
36   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37   * GNU General Public License for more details.
38   *
39   * Contact details for copyright holder:
40   *
41   *     William Chesters <williamc At paneris.org>
42   *     http://paneris.org/~williamc
43   *     Obrechtstraat 114, 2517VX Den Haag, The Netherlands
44   */
45  
46  package org.melati.util;
47  
48  import java.util.Enumeration;
49  import javax.servlet.http.HttpSession;
50  import javax.servlet.http.HttpServletRequest;
51  
52  /**
53   * An <code>HttpServletRequest</code> created from values stored in 
54   * the <code>Session</code>.
55   * 
56   * Used during login to be able to return to the point where an 
57   * <code>AccessPoemException</code> was thrown once the user has 
58   * successfully logged in. 
59   */
60  public class ReconstructedHttpServletRequest
61      extends DelegatedHttpServletRequest {
62  
63    private HttpServletRequestParameters oldParams;
64  
65    /**
66     * Constructor.
67     * 
68     * @param oldParams parameters from original request
69     * @param newRequest the new request to add parameters to
70     * @throws ReconstructedHttpServletRequestMismatchException
71     */
72    public ReconstructedHttpServletRequest(
73        HttpServletRequestParameters oldParams, HttpServletRequest newRequest)
74            throws ReconstructedHttpServletRequestMismatchException {
75  
76      super(newRequest);
77      this.oldParams = oldParams;
78  
79      HttpSession session = newRequest.getSession(false);
80      if (!oldParams.requestURL.equals(HttpUtil.getRelativeRequestURL(newRequest))
81       || !(oldParams.queryString == null ?
82            newRequest.getQueryString() == null :
83            oldParams.queryString.equals(newRequest.getQueryString())) ||
84          !(session != null && session.getId() != null &&
85            session.getId().equals(oldParams.sessionID)))
86        throw new ReconstructedHttpServletRequestMismatchException(oldParams,
87                                                                   newRequest);
88    }
89  
90    /**
91     * Set the peer property.
92     * @param newRequest the request to set as peer
93     */
94    public void setNewRequest(HttpServletRequest newRequest) {
95      peer = newRequest;
96    }
97  
98    /**
99     * @return the new request
100    */
101   public HttpServletRequest getNewRequest() {
102     return peer;
103   }
104 
105   /**
106    * From the <B>old</B> request.
107    * {@inheritDoc}
108    * @see javax.servlet.ServletRequest#getParameter(java.lang.String)
109    */
110   public String getParameter(String name) {
111     String[] vals = (String[])oldParams.parameters.get(name);
112     return vals == null ? null : vals[0];
113   }
114 
115   /**
116    * From the <B>old</B> request.
117    * {@inheritDoc}
118    * @see javax.servlet.ServletRequest#getParameterValues(java.lang.String)
119    */
120   public String[] getParameterValues(String name) {
121     return (String[])oldParams.parameters.get(name);
122   }
123 
124   /**
125    * From the <B>old</B> request.
126    * {@inheritDoc}
127    * @see javax.servlet.ServletRequest#getParameterNames()
128    */
129   public Enumeration<String> getParameterNames() {
130     return oldParams.parameters.keys();
131   }
132 
133   /**
134    * From the <B>old</B> request.
135    * {@inheritDoc}
136    * @see javax.servlet.http.HttpServletRequest#getMethod()
137    */
138   public String getMethod() {
139     return oldParams.method;
140   }
141 }