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  
31  import org.apache.myfaces.orchestra.lib._UrlMatcher;
32  
33  import java.io.IOException;
34  
35  /**
36   * This filter wraps each {@link HttpServletResponse} in a {@link RequestParameterResponseWrapper},
37   * meaning that every call to response.encodeURL() gets forwarded to the RequestParameterProviderManager.
38   */
39  public class RequestParameterServletFilter implements Filter
40  {
41      public final static String REQUEST_PARAM_FILTER_CALLED =
42          RequestParameterServletFilter.class.getName() + ".CALLED";
43      public final static String REQUEST_PARAM_RESPONSE_WRAPPED =
44          RequestParameterServletFilter.class.getName() + ".WRAPPED";
45  
46      private _UrlMatcher urlMatcher;
47  
48      public RequestParameterServletFilter()
49      {
50      }
51  
52      public void init(FilterConfig filterConfig)
53      {
54          urlMatcher = new _UrlMatcher(filterConfig);
55      }
56  
57      public void doFilter(ServletRequest servletRequest,
58                           ServletResponse servletResponse,
59                           FilterChain filterChain) throws IOException, ServletException
60      {
61          if (urlMatcher.accept(servletRequest) && servletResponse instanceof HttpServletResponse)
62          {
63              HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
64              if (!Boolean.TRUE.equals(httpServletRequest.getAttribute(REQUEST_PARAM_FILTER_CALLED)))
65              {
66                  httpServletRequest.setAttribute(REQUEST_PARAM_FILTER_CALLED, Boolean.TRUE);
67                  servletResponse = new RequestParameterResponseWrapper((HttpServletResponse) servletResponse);
68              }
69          }
70  
71          filterChain.doFilter(servletRequest, servletResponse);
72      }
73  
74      public void destroy()
75      {
76      }
77  }