View Javadoc

1   /**
2    *
3    *  Licensed to the Apache Software Foundation (ASF) under one or more
4    *  contributor license agreements.  See the NOTICE file distributed with
5    *  this work for additional information regarding copyright ownership.
6    *  The ASF licenses this file to You under the Apache License, Version 2.0
7    *  (the "License"); you may not use this file except in compliance with
8    *  the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing, software
13   *  distributed under the License is distributed on an "AS IS" BASIS,
14   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   *  See the License for the specific language governing permissions and
16   *  limitations under the License.
17   */
18  package org.apache.geronimo.jetty;
19  
20  import javax.servlet.http.Cookie;
21  
22  import org.mortbay.http.HttpRequest;
23  import org.mortbay.jetty.servlet.ServletHandler;
24  import org.mortbay.jetty.servlet.ServletHttpRequest;
25  import org.mortbay.jetty.servlet.SessionManager;
26  
27  /**
28   * @version $Rev$ $Date$
29   */
30  public class GeronimoServletHttpRequest extends ServletHttpRequest {
31      private final ServletHandler servletHandler;
32      private final HttpRequest request;
33      private String requestedSessionId;
34      
35      public GeronimoServletHttpRequest(ServletHandler servletHandler, String pathInContext, HttpRequest request) {
36          super(servletHandler, pathInContext, request);
37          this.servletHandler = servletHandler;
38          this.request = request;
39      }
40      
41      public String getRequestedSessionId() {
42          return requestedSessionId;
43      }
44      
45      public void setRequestedSessionId(String pathParams) {
46          requestedSessionId = null;
47          if (servletHandler.isUsingCookies()) {
48              Cookie[] cookies= request.getCookies();
49              if (cookies!=null && cookies.length>0) {
50                  for (int i=0;i<cookies.length;i++) {
51                      if (SessionManager.__SessionCookie.equalsIgnoreCase(cookies[i].getName())) {
52                          if (null != requestedSessionId) {
53                              // Multiple jsessionid cookies. Probably due to
54                              // multiple paths and/or domains. Pick the first
55                              // known session or the last defined cookie.
56                              SessionManager manager = servletHandler.getSessionManager();
57                              if (manager!=null && manager.getHttpSession(requestedSessionId)!=null)
58                                  break;
59                          }
60                          requestedSessionId = cookies[i].getValue();
61                      }
62                  }
63              }
64          }
65              
66          // check if there is a url encoded session param.
67          if (null != pathParams && pathParams.startsWith(SessionManager.__SessionURL)) {
68              String id = pathParams.substring(SessionManager.__SessionURL.length() + 1);
69              if (null == requestedSessionId) {
70                  requestedSessionId = id;
71              }
72          }
73      }
74  }