Java过滤器CharacterEncodingFilter位置问题。[通俗易懂]

Java过滤器CharacterEncodingFilter位置问题。[通俗易懂]转:https://segmentfault.com/a/1190000006184156前人就有的经验在开发javaweb应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择合适的encoding来解析request过来的参数。这个问题的解决办法很简单,就是写一个filter来过滤所有请求,然后设置一下req…

大家好,又见面了,我是你们的朋友全栈君。

转:https://segmentfault.com/a/1190000006184156

前人就有的经验

在开发java web应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择合适的encoding来解析request过来的参数。

这个问题的解决办法很简单,就是写一个filter来过滤所有请求,然后设置一下request的characterEncoding,比如:

public class CharacterEncodingFilter implements Filter {

  protected String encoding = "utf-8";

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException {
    request.setCharacterEncoding(encoding);
    chain.doFilter(request, response);
  }

  public void init(FilterConfig filterConfig) throws ServletException {
    String initEncoding = filterConfig.getInitParameter("encoding");
    if (Strings.isNotBlank(initEncoding)) {
      this.encoding = initEncoding;
    }
  }

  public void destroy() {
    encoding = null;
  }

}

把这个filter在web.xml里配置一下所拦截的url pattern就行了。

但是这里有个陷阱,整个web应用里,这个filter的拦截顺序必须是第一个,否则还是会出现乱码问题。这是因为(至少在tomcat里):

  1. request对象的parameter并不是一开始就解析的,它是等你第一次调用getParameter*等凡和获得请求参数有关的方法的时候才解析的

  2. paramter一旦被解析过一次,那就不会再次被解析

所以如果在CharacterEncodingFilter之前有另外一个filter,而这个filter调用了getParameter*方法,那么就有可能使用错误的encoding来解析,从而造成乱码问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158270.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MySQL配置+SQLyog安装教程

    MySQL配置+SQLyog安装教程一标题、MySQL的配置官网地址:MySQL官网地址。我选择的版本是5.5.27,具体mis文件运行之后的操作步骤参考博客MySQL安装教程。二、SQLyog安装教程安装程序下载:链接:https://pan.baidu.com/s/1MeFavdcOAd0BUG3D9cA9eg提取码:i5mi安装教程参考博客SQLyog安装教程三、所需数据库资源百度云链接:链接:https…

  • Java开发手册之代码格式

    Java开发手册之代码格式Java开发手册之代码格式

  • java中的向上取整和向下取整

    java中的向上取整和向下取整向上取整:比自己大的最小整数。向下取整:比自己小的最大整数。publicclassRoundingUp{publicstaticvoidmain(String[]args){System.out.println(Math.ceil(1.5));//2.0System.out.println(Math.ceil(-1.5));//…

  • SCSA 模拟题 知识点 (一)

    SCSA 模拟题 知识点 (一)SCSA模拟题知识点(一)1、CIA三原则基本是安全业界的主流共识,CIA原则是:完整性、可用性、机密性2、【AC】关于流量管理功能说法正确的是:流控可以基于用户进行流控3、【AC】数据包如果经过二层交换机转发后,这个数据包的源MAC不会发生变化,如果经过三层交换机路由转发后,源MAC会发生变化4、【SSL】私有用户同一时间只允许一台PC使用;共有用户允许多人使用,在同一时间内同时登录SSLVPN;私有用户可以在线修改登录密码、DKEY的PIN码、手机号码等5、【EDR】病毒..

  • springboot idea创建_idea创建java

    springboot idea创建_idea创建java如何在idea中创建一个SpringBoot项目(超详细教学)

  • 手机APP测试(测试点、测试流程、功能测试)

    手机APP测试(测试点、测试流程、功能测试)1、功能测试1.1启动APP安装完成后,是否可以正常打开,稳定运行APP的速度是可以让人接受,切换是否流畅网络异常时,应用是否会崩溃:在请求超时的情况下,如果程序逻辑处理的不好,就有可能发生

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号