From: markt Date: Thu, 21 Jul 2011 13:20:40 +0000 (+0000) Subject: Promote the Set Character Encoding filter to the filters package so it is more widely... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=63004199d9a930d9769e8fba9f45d30725a8bd7b;p=tomcat7.0 Promote the Set Character Encoding filter to the filters package so it is more widely available. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1149166 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java b/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java new file mode 100644 index 000000000..ac35edd7f --- /dev/null +++ b/java/org/apache/catalina/filters/SetCharacterEncodingFilter.java @@ -0,0 +1,135 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one or more +* contributor license agreements. See the NOTICE file distributed with +* this work for additional information regarding copyright ownership. +* The ASF licenses this file to You under the Apache License, Version 2.0 +* (the "License"); you may not use this file except in compliance with +* the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package org.apache.catalina.filters; + +import java.io.IOException; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import org.apache.juli.logging.Log; +import org.apache.juli.logging.LogFactory; + + +/** + *

Example filter that sets the character encoding to be used in parsing the + * incoming request, either unconditionally or only if the client did not + * specify a character encoding. Configuration of this filter is based on + * the following initialization parameters:

+ * + * + *

Although this filter can be used unchanged, it is also easy to + * subclass it and make the selectEncoding() method more + * intelligent about what encoding to choose, based on characteristics of + * the incoming request (such as the values of the Accept-Language + * and User-Agent headers, or a value stashed in the current + * user's session.

+ */ + +public class SetCharacterEncodingFilter extends FilterBase { + + private static final Log log = + LogFactory.getLog(SetCharacterEncodingFilter.class); + + + // ----------------------------------------------------- Instance Variables + + /** + * The default character encoding to set for requests that pass through + * this filter. + */ + private String encoding = null; + public void setEncoding(String encoding) { this.encoding = encoding; } + public String getEncoding() { return encoding; } + + + /** + * Should a character encoding specified by the client be ignored? + */ + private boolean ignore = false; + public void setIgnore(boolean ignore) { this.ignore = ignore; } + public boolean isIgnore() { return ignore; } + + + // --------------------------------------------------------- Public Methods + + + /** + * Select and set (if specified) the character encoding to be used to + * interpret request parameters for this request. + * + * @param request The servlet request we are processing + * @param response The servlet response we are creating + * @param chain The filter chain we are processing + * + * @exception IOException if an input/output error occurs + * @exception ServletException if a servlet error occurs + */ + @Override + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) + throws IOException, ServletException { + + // Conditionally select and set the character encoding to be used + if (ignore || (request.getCharacterEncoding() == null)) { + String characterEncoding = selectEncoding(request); + if (characterEncoding != null) + request.setCharacterEncoding(characterEncoding); + } + + // Pass control on to the next filter + chain.doFilter(request, response); + } + + + // ------------------------------------------------------ Protected Methods + + @Override + protected Log getLogger() { + return log; + } + + + /** + * Select an appropriate character encoding to be used, based on the + * characteristics of the current request and/or filter initialization + * parameters. If no character encoding should be set, return + * null. + *

+ * The default implementation unconditionally returns the value configured + * by the encoding initialization parameter for this + * filter. + * + * @param request The servlet request we are processing + */ + protected String selectEncoding(ServletRequest request) { + return this.encoding; + } +} diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 04d53d7a4..a49d43744 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -70,6 +70,11 @@ 51518: Correct error in web.xml parsing rules for the <others/> tag when using absolute ordering. (markt) + + Move the SetCharacaterEncoding filter from the examples web application + to the org.apache.catalina.filters package so it is + available for all web applications. (markt) + diff --git a/webapps/docs/config/filter.xml b/webapps/docs/config/filter.xml index 6865a7c54..49bd27ff5 100644 --- a/webapps/docs/config/filter.xml +++ b/webapps/docs/config/filter.xml @@ -1100,6 +1100,51 @@ org.apache.catalina.filters.RequestDumperFilter.handlers = 1request-dumper.org.a +

+ + + +

User agents don't always include character encoding information in + requests. Depending on the how the request is processed, a default of either + ISO-8859-1 or the platform default encoding may be used. This is not always + desirable. This filter provides options for setting that encoding or forcing + it to a particular value.

+ +
+ + + +

The filter class name for the Set Character Encoding Filter is + org.apache.catalina.filters.SetCharacterEncodingFilter + .

+ +
+ + + +

The Set Character Encoding Filter supports the following initialization + parameters:

+ + + + +

Name of the character encoding which should be set.

+
+ + +

Determines if any character encoding specified by the user agent is + ignored. If this attribute is true, any value provided by + the user agent is ignored. If false, the encoding is only + set if the user agent did not specify an encoding.

+
+ +
+ +
+ +
+ +
diff --git a/webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java b/webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java deleted file mode 100644 index a8d98c115..000000000 --- a/webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java +++ /dev/null @@ -1,175 +0,0 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package filters; - - -import java.io.IOException; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - - -/** - *

Example filter that sets the character encoding to be used in parsing the - * incoming request, either unconditionally or only if the client did not - * specify a character encoding. Configuration of this filter is based on - * the following initialization parameters:

- *
    - *
  • encoding - The character encoding to be configured - * for this request, either conditionally or unconditionally based on - * the ignore initialization parameter. This parameter - * is required, so there is no default.
  • - *
  • ignore - If set to "true", any character encoding - * specified by the client is ignored, and the value returned by the - * selectEncoding() method is set. If set to "false, - * selectEncoding() is called only if the - * client has not already specified an encoding. By default, this - * parameter is set to "true".
  • - *
- * - *

Although this filter can be used unchanged, it is also easy to - * subclass it and make the selectEncoding() method more - * intelligent about what encoding to choose, based on characteristics of - * the incoming request (such as the values of the Accept-Language - * and User-Agent headers, or a value stashed in the current - * user's session.

- * - * @author Craig McClanahan - * @version $Id$ - */ - -public class SetCharacterEncodingFilter implements Filter { - - - // ----------------------------------------------------- Instance Variables - - - /** - * The default character encoding to set for requests that pass through - * this filter. - */ - protected String encoding = null; - - - /** - * The filter configuration object we are associated with. If this value - * is null, this filter instance is not currently configured. - */ - protected FilterConfig filterConfig = null; - - - /** - * Should a character encoding specified by the client be ignored? - */ - protected boolean ignore = true; - - - // --------------------------------------------------------- Public Methods - - - /** - * Take this filter out of service. - */ - @Override - public void destroy() { - - this.encoding = null; - this.filterConfig = null; - - } - - - /** - * Select and set (if specified) the character encoding to be used to - * interpret request parameters for this request. - * - * @param request The servlet request we are processing - * @param response The servlet response we are creating - * @param chain The filter chain we are processing - * - * @exception IOException if an input/output error occurs - * @exception ServletException if a servlet error occurs - */ - @Override - public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) - throws IOException, ServletException { - - // Conditionally select and set the character encoding to be used - if (ignore || (request.getCharacterEncoding() == null)) { - String characterEncoding = selectEncoding(request); - if (characterEncoding != null) - request.setCharacterEncoding(characterEncoding); - } - - // Pass control on to the next filter - chain.doFilter(request, response); - - } - - - /** - * Place this filter into service. - * - * @param fConfig The filter configuration object - */ - @Override - public void init(FilterConfig fConfig) throws ServletException { - - this.filterConfig = fConfig; - this.encoding = fConfig.getInitParameter("encoding"); - String value = fConfig.getInitParameter("ignore"); - if (value == null) - this.ignore = true; - else if (value.equalsIgnoreCase("true")) - this.ignore = true; - else if (value.equalsIgnoreCase("yes")) - this.ignore = true; - else - this.ignore = false; - - } - - - // ------------------------------------------------------ Protected Methods - - - /** - * Select an appropriate character encoding to be used, based on the - * characteristics of the current request and/or filter initialization - * parameters. If no character encoding should be set, return - * null. - *

- * The default implementation unconditionally returns the value configured - * by the encoding initialization parameter for this - * filter. - * - * @param request The servlet request we are processing - */ - protected String selectEncoding(ServletRequest request) { - - return (this.encoding); - - } - - -} diff --git a/webapps/examples/WEB-INF/web.xml b/webapps/examples/WEB-INF/web.xml index 76b0cfad9..62dda3753 100644 --- a/webapps/examples/WEB-INF/web.xml +++ b/webapps/examples/WEB-INF/web.xml @@ -46,11 +46,15 @@ Set Character Encoding - filters.SetCharacterEncodingFilter + org.apache.catalina.filters.SetCharacterEncodingFilter encoding EUC_JP + + ignore + true +