资讯专栏INFORMATION COLUMN

CharacterEncodingFilter一定要放在第一个

KitorinZero / 545人阅读

摘要:在开发应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择合适的来解析过来的参数。但是这里有个陷阱,整个应用里,这个的拦截顺序必须是第一个,否则还是会出现乱码问题。

在开发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里):

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66033.html

相关文章

  • CharacterEncodingFilter一定放在一个

    摘要:在开发应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择合适的来解析过来的参数。但是这里有个陷阱,整个应用里,这个的拦截顺序必须是第一个,否则还是会出现乱码问题。 在开发java web应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择...

    FuisonDesign 评论0 收藏0
  • CharacterEncodingFilter一定放在一个

    摘要:在开发应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择合适的来解析过来的参数。但是这里有个陷阱,整个应用里,这个的拦截顺序必须是第一个,否则还是会出现乱码问题。 在开发java web应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择...

    hedzr 评论0 收藏0
  • CharacterEncodingFilter一定放在一个

    摘要:在开发应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择合适的来解析过来的参数。但是这里有个陷阱,整个应用里,这个的拦截顺序必须是第一个,否则还是会出现乱码问题。 在开发java web应用的时候经常会遇到令人头痛的字符编码问题,期中一个就是客户端发送过来的请求的编码在请求头里并没有,开发人员需要在后端自己选择...

    VioletJack 评论0 收藏0
  • 使用maven创建简单的多模块 Spring Web项目

    摘要:第一次写技术文章,主要内容是使用创建一个简单的项目,如有操作或理解错误请务必指出,当谦虚学习。基本思想其实就是一个项目引用别的模块包,最终项目被打成包发布。 第一次写技术文章,主要内容是使用maven创建一个简单的SpringMVC WEB 项目,如有操作或理解错误请务必指出,当谦虚学习。做这一次的工作主要是因为想加强一下自己对Spring Web 项目的理解,因为平时都是直接写业务代...

    DevYK 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<