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 =
39          RequestParameterServletFilter.class.getName() + ".CALLED";
40      public final static String REQUEST_PARAM_RESPONSE_WRAPPED =
41          RequestParameterServletFilter.class.getName() + ".WRAPPED";
42  
43      public RequestParameterServletFilter()
44      {
45      }
46  
47      public void init(FilterConfig filterConfig)
48      {
49      }
50  
51      public void doFilter(ServletRequest servletRequest,
52                           ServletResponse servletResponse,
53                           FilterChain filterChain) throws IOException, ServletException
54      {
55          if (servletResponse instanceof HttpServletResponse)
56          {
57              HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
58              if (!Boolean.TRUE.equals(httpServletRequest.getAttribute(REQUEST_PARAM_FILTER_CALLED)))
59              {
60                  httpServletRequest.setAttribute(REQUEST_PARAM_FILTER_CALLED, Boolean.TRUE);
61                  servletResponse = new RequestParameterResponseWrapper((HttpServletResponse) servletResponse);
62              }
63          }
64  
65          filterChain.doFilter(servletRequest, servletResponse);
66      }
67  
68      public void destroy()
69      {
70      }
71  }