SpringMVC编码过滤器配置

    xiaoxiao2025-06-09  23

    -----web.xml

    <filter>         <filter-name>CharacterEncodingFilter</filter-name>           <filter-class>org.springframework.web.filter.characterencodingfilter</filter-class>           <init-param>               <param-name>encoding</param-name>               <param-value>utf-8</param-value>           </init-param>           <init-param>               <param-name>forceRequestEncoding</param-name>               <param-value>true</param-value>           </init-param>           <init-param>               <param-name>forceResponseEncoding</param-name>               <param-value>true</param-value>           </init-param>    </filter>     <filter-mapping>         <filter-name>CharacterEncodingFilter</filter-name>         <url-pattern>/*</url-pattern>     </filter-mapping>

     

     

    /*  * Copyright 2002-2018 the original author or authors.  *  * Licensed 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  *  *      https://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.springframework.web.filter;

    import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

    import org.springframework.lang.Nullable; import org.springframework.util.Assert;

    /**  * Servlet Filter that allows one to specify a character encoding for requests.  * This is useful because current browsers typically do not set a character  * encoding even if specified in the HTML page or form.  *  * <p>This filter can either apply its encoding if the request does not already  * specify an encoding, or enforce this filter's encoding in any case  * ("forceEncoding"="true"). In the latter case, the encoding will also be  * applied as default response encoding (although this will usually be overridden  * by a full content type set in the view).  *  * @author Juergen Hoeller  * @since 15.03.2004  * @see #setEncoding  * @see #setForceEncoding  * @see javax.servlet.http.HttpServletRequest#setCharacterEncoding  * @see javax.servlet.http.HttpServletResponse#setCharacterEncoding  */ public class CharacterEncodingFilter extends OncePerRequestFilter {

        @Nullable     private String encoding;

        private boolean forceRequestEncoding = false;

        private boolean forceResponseEncoding = false;

        /**      * Create a default {@code CharacterEncodingFilter},      * with the encoding to be set via {@link #setEncoding}.      * @see #setEncoding      */     public CharacterEncodingFilter() {     }

        /**      * Create a {@code CharacterEncodingFilter} for the given encoding.      * @param encoding the encoding to apply      * @since 4.2.3      * @see #setEncoding      */     public CharacterEncodingFilter(String encoding) {         this(encoding, false);     }

        /**      * Create a {@code CharacterEncodingFilter} for the given encoding.      * @param encoding the encoding to apply      * @param forceEncoding whether the specified encoding is supposed to      * override existing request and response encodings      * @since 4.2.3      * @see #setEncoding      * @see #setForceEncoding      */     public CharacterEncodingFilter(String encoding, boolean forceEncoding) {         this(encoding, forceEncoding, forceEncoding);     }

        /**      * Create a {@code CharacterEncodingFilter} for the given encoding.      * @param encoding the encoding to apply      * @param forceRequestEncoding whether the specified encoding is supposed to      * override existing request encodings      * @param forceResponseEncoding whether the specified encoding is supposed to      * override existing response encodings      * @since 4.3      * @see #setEncoding      * @see #setForceRequestEncoding(boolean)      * @see #setForceResponseEncoding(boolean)      */     public CharacterEncodingFilter(String encoding, boolean forceRequestEncoding, boolean forceResponseEncoding) {         Assert.hasLength(encoding, "Encoding must not be empty");         this.encoding = encoding;         this.forceRequestEncoding = forceRequestEncoding;         this.forceResponseEncoding = forceResponseEncoding;     }

        /**      * Set the encoding to use for requests. This encoding will be passed into a      * {@link javax.servlet.http.HttpServletRequest#setCharacterEncoding} call.      * <p>Whether this encoding will override existing request encodings      * (and whether it will be applied as default response encoding as well)      * depends on the {@link #setForceEncoding "forceEncoding"} flag.      */     public void setEncoding(@Nullable String encoding) {         this.encoding = encoding;     }

        /**      * Return the configured encoding for requests and/or responses.      * @since 4.3      */     @Nullable     public String getEncoding() {         return this.encoding;     }

        /**      * Set whether the configured {@link #setEncoding encoding} of this filter      * is supposed to override existing request and response encodings.      * <p>Default is "false", i.e. do not modify the encoding if      * {@link javax.servlet.http.HttpServletRequest#getCharacterEncoding()}      * returns a non-null value. Switch this to "true" to enforce the specified      * encoding in any case, applying it as default response encoding as well.      * <p>This is the equivalent to setting both {@link #setForceRequestEncoding(boolean)}      * and {@link #setForceResponseEncoding(boolean)}.      * @see #setForceRequestEncoding(boolean)      * @see #setForceResponseEncoding(boolean)      */     public void setForceEncoding(boolean forceEncoding) {         this.forceRequestEncoding = forceEncoding;         this.forceResponseEncoding = forceEncoding;     }

        /**      * Set whether the configured {@link #setEncoding encoding} of this filter      * is supposed to override existing request encodings.      * <p>Default is "false", i.e. do not modify the encoding if      * {@link javax.servlet.http.HttpServletRequest#getCharacterEncoding()}      * returns a non-null value. Switch this to "true" to enforce the specified      * encoding in any case.      * @since 4.3      */     public void setForceRequestEncoding(boolean forceRequestEncoding) {         this.forceRequestEncoding = forceRequestEncoding;     }

        /**      * Return whether the encoding should be forced on requests.      * @since 4.3      */     public boolean isForceRequestEncoding() {         return this.forceRequestEncoding;     }

        /**      * Set whether the configured {@link #setEncoding encoding} of this filter      * is supposed to override existing response encodings.      * <p>Default is "false", i.e. do not modify the encoding.      * Switch this to "true" to enforce the specified encoding      * for responses in any case.      * @since 4.3      */     public void setForceResponseEncoding(boolean forceResponseEncoding) {         this.forceResponseEncoding = forceResponseEncoding;     }

        /**      * Return whether the encoding should be forced on responses.      * @since 4.3      */     public boolean isForceResponseEncoding() {         return this.forceResponseEncoding;     }

        @Override     protected void doFilterInternal(             HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)             throws ServletException, IOException {

            String encoding = getEncoding();         if (encoding != null) {             if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {                 request.setCharacterEncoding(encoding);             }             if (isForceResponseEncoding()) {                 response.setCharacterEncoding(encoding);             }         }         filterChain.doFilter(request, response);     }

    }  

    最新回复(0)