1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.orchestra.requestParameterProvider.jsf;
20
21 import org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterResponseWrapper;
22 import org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterServletFilter;
23
24 import javax.faces.FacesException;
25 import javax.faces.context.FacesContext;
26 import javax.faces.context.FacesContextFactory;
27 import javax.faces.lifecycle.Lifecycle;
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30
31 /***
32 * Ensure that a custom wrapper is put aroung the HttpServletResponse so that encodeURL can be
33 * intercepted and modified.
34 * <p>
35 * There is a servlet filter (RequestParameterServletFilter) that does this in the obvious way, but
36 * it is a nuisance to have to set up filters in the web.xml. This class implements a sneaky hack
37 * to get this to happen automatically for JSF applications, ie no servlet filter is needed when
38 * this is specified in the faces-config.xml file as the FacesContextFactory.
39 * <p>
40 * If you have to deal with a mixed environment e.g. JSP/JSF it would be better to use the
41 * {@link org.apache.myfaces.orchestra.requestParameterProvider.RequestParameterServletFilter}.
42 */
43 public class RequestParameterFacesContextFactory extends FacesContextFactory
44 {
45 private final FacesContextFactory original;
46
47 public RequestParameterFacesContextFactory(FacesContextFactory original)
48 {
49 this.original = original;
50 }
51
52 public FacesContext getFacesContext(Object context, Object request, Object response, Lifecycle lifecycle) throws FacesException
53 {
54 if (response instanceof HttpServletResponse)
55 {
56 HttpServletRequest httpServletRequest = (HttpServletRequest) request;
57
58
59 if (!Boolean.TRUE.equals(httpServletRequest.getAttribute(RequestParameterServletFilter.REQUEST_PARAM_FILTER_CALLED)))
60 {
61
62
63
64 response = new RequestParameterResponseWrapper((HttpServletResponse) response);
65
66
67
68
69
70
71
72
73
74
75
76 httpServletRequest.setAttribute(RequestParameterServletFilter.REQUEST_PARAM_RESPONSE_WRAPPED, Boolean.TRUE);
77
78 }
79 }
80
81 return original.getFacesContext(context, request, response, lifecycle);
82 }
83 }