1 /***
2 * JFoxSOAF, Service-Oriented Application Framework
3 *
4 * Copyright (C) www.huihoo.org
5 *
6 * Distributable under GNU LGPL
7 *
8 * For more information, please visit: http://www.huihoo.org/jfox/jfoxsoaf
9 */
10
11 package org.huihoo.jfox.soaf.util.filter;
12
13 import java.io.IOException;
14
15 import javax.servlet.FilterChain;
16 import javax.servlet.FilterConfig;
17 import javax.servlet.ServletException;
18 import javax.servlet.ServletRequest;
19 import javax.servlet.ServletResponse;
20
21 /***
22 * <p>
23 * Filter that sets the character encoding to be used in parsing the incoming
24 * request, either unconditionally or only if the client did not specify a
25 * character encoding. Resource of this filter is based on the following
26 * initialization parameters:
27 * </p>
28 *
29 * @author <a href="mailto:founder_chen@yahoo.com.cn">Peter Cheng </a>
30 * @version $Revision: 1.2 $ $Date: 2004/10/25 14:46:36 $
31 * @version Revision: 1.0
32 */
33
34 public class EncodingFilter {
35
36 /***
37 * The default character encoding to set for requests that pass through this
38 * filter.
39 */
40 private String encoding = null;
41
42 /***
43 * The filter configuration object we are associated with. If this value is
44 * null, this filter instance is not currently configured.
45 */
46 private FilterConfig filterConfig = null;
47
48 /***
49 * Should a character encoding specified by the client be ignored?
50 */
51 private boolean ignore = true;
52
53 /***
54 * Take this filter out of service.
55 */
56 public void destroy() {
57 this.encoding = null;
58 this.filterConfig = null;
59 }
60
61 /***
62 * Select and set (if specified) the character encoding to be used to
63 * interpret request parameters for this request.
64 *
65 * @param request
66 * The servlet request we are processing
67 * @param response
68 * The servlet response we are creating
69 * @param chain
70 * The filter chain we are processing
71 * @exception java.io.IOException
72 * if an input/output error occurs
73 * @exception javax.servlet.ServletException
74 * if a servlet error occurs
75 */
76 public void doFilter(ServletRequest request, ServletResponse response,
77 FilterChain chain) throws IOException, ServletException {
78
79 if (ignore || (request.getCharacterEncoding() == null)) {
80 String encoding = selectEncoding(request);
81 if (encoding != null)
82 request.setCharacterEncoding(encoding);
83 }
84
85
86 chain.doFilter(request, response);
87 }
88
89 /***
90 * Place this filter into service.
91 *
92 * @param filterConfig
93 * The filter configuration object
94 */
95 public void init(FilterConfig filterConfig) throws ServletException {
96
97 this.filterConfig = filterConfig;
98 String encodingConfig = filterConfig.getInitParameter("encoding");
99 if (encodingConfig != null) {
100 this.encoding = encodingConfig;
101 }
102 String value = filterConfig.getInitParameter("ignore");
103 if (value == null) {
104 this.ignore = true;
105 } else if (value.equalsIgnoreCase("true")) {
106 this.ignore = true;
107 } else if (value.equalsIgnoreCase("yes")) {
108 this.ignore = true;
109 } else {
110 this.ignore = false;
111 }
112 }
113
114 /***
115 * Select an appropriate character encoding to be used, based on the
116 * characteristics of the current request and/or filter initialization
117 * parameters. If no character encoding should be set, return
118 * <code>null</code>.
119 * <p>
120 * The default implementation unconditionally returns the value configured
121 * by the <strong>encoding </strong> initialization parameter for this
122 * filter.
123 *
124 * @param request
125 * The servlet request we are processing
126 */
127 protected String selectEncoding(ServletRequest request) {
128 return (this.encoding);
129 }
130
131 /***
132 * @return Returns the encoding.
133 */
134 public String getEncoding() {
135 return encoding;
136 }
137
138 /***
139 * @return Returns the ignore.
140 */
141 public boolean isIgnore() {
142 return ignore;
143 }
144 }