Fork me on GitHub

SpringMVC乱码过滤器配置

复制代码
    <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>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
复制代码

上诉方式只对post请求有效

如需要对get 全局请求有效,一种方式修改Tomcat server.xml文件

<Connector port="8080" maxHttpHeaderSize="8192" 
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
              enableLookups="false" redirectPort="8443" acceptCount="100" 
              connectionTimeout="20000" disableUploadTimeout="true" uRIEncoding="UTF-8"/>

另一种自定义利用包装类来过滤 或者动态代理

贴一下Warper方式

复制代码
/**
 * 
 * 版权所有 All Rights Reserved 需改成动态代理(AOP)方式
 * 
 * @author Irving 
 * @date 2013年2月15日2:44:23
 * @version 1.0.0
 * @email zhouyongtao@outlook.com
 */
public class CharacterEncodingFilter implements Filter {

    private FilterConfig config;
    private String defaultCharset = "UTF-8";
    private static Logger logger = LogManager.getLogger("CharacterEncodingFilter");

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        String charset = this.config.getInitParameter("encoding");
        if (charset == null) {
            charset = defaultCharset;
        }

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;

        request.setCharacterEncoding(charset);
        response.setCharacterEncoding(charset);
        response.setContentType("text/html;charset=" + charset);
        chain.doFilter(new MyRequest(request), response);
    }

    class MyRequest extends HttpServletRequestWrapper {

        private HttpServletRequest request;

        public MyRequest(HttpServletRequest request) {
            super(request);
            this.request = request;
        }

        @Override
        public String getParameter(String name) {

            String value = this.request.getParameter(name);
            if (!request.getMethod().equalsIgnoreCase("get")) {
                return value;
            }

            if (value == null) {
                return null;
            }

            try {
                return value = new String(value.getBytes("iso8859-1"), request.getCharacterEncoding());
            } catch (UnsupportedEncodingException e) {
                throw new RuntimeException(e);
            }

        }
    }

    public void destroy() {

    }

    public void init(FilterConfig filterConfig) throws ServletException {
        logger.info("========== 启用解决全站乱码Filter =======");
        this.config = filterConfig;
    }
复制代码
posted @   花儿笑弯了腰  阅读(999)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示