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 HttpServletRequest} 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  }