View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with 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,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  
20  package org.apache.myfaces.orchestra.requestParameterProvider;
21  
22  import javax.servlet.Filter;
23  import javax.servlet.FilterChain;
24  import javax.servlet.FilterConfig;
25  import javax.servlet.ServletException;
26  import javax.servlet.ServletRequest;
27  import javax.servlet.ServletResponse;
28  import javax.servlet.http.HttpServletRequest;
29  import javax.servlet.http.HttpServletResponse;
30  import java.io.IOException;
31  
32  /**
33   * This filter wraps each {@link HttpServletResponse} in a {@link RequestParameterResponseWrapper},
34   * meaning that every call to response.encodeURL() gets forwarded to the RequestParameterProviderManager.
35   */
36  public class RequestParameterServletFilter implements Filter
37  {
38      public final static String REQUEST_PARAM_FILTER_CALLED = RequestParameterServletFilter.class.getName() + ".CALLED";
39      public final static String REQUEST_PARAM_RESPONSE_WRAPPED = RequestParameterServletFilter.class.getName() + ".WRAPPED";
40  
41      public RequestParameterServletFilter()
42      {
43      }
44  
45      public void init(FilterConfig filterConfig)
46      {
47      }
48  
49      public void doFilter(ServletRequest servletRequest,
50                           ServletResponse servletResponse,
51                           FilterChain filterChain) throws IOException, ServletException
52      {
53          if (servletResponse instanceof HttpServletResponse)
54          {
55              HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
56              if (!Boolean.TRUE.equals(httpServletRequest.getAttribute(REQUEST_PARAM_FILTER_CALLED)))
57              {
58                  httpServletRequest.setAttribute(REQUEST_PARAM_FILTER_CALLED, Boolean.TRUE);
59                  servletResponse = new RequestParameterResponseWrapper((HttpServletResponse) servletResponse);
60              }
61          }
62  
63          filterChain.doFilter(servletRequest, servletResponse);
64      }
65  
66      public void destroy()
67      {
68      }
69  }