博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
A Filter of Java URL Encoding: GetQueryStringEn...
阅读量:5891 次
发布时间:2019-06-19

本文共 2483 字,大约阅读时间需要 8 分钟。

hot3.png

Spring的CharacterEncodingFilter 只能对post参数转码;要解决get中文乱码还得用这个:
import java.io.IOException; import java.util.Collections;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import javax.servlet.Filter; import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;@SuppressWarnings("unchecked") public class GetQueryStringEncoding implements Filter {private static final Log logger = LogFactory .getLog(GetQueryStringEncoding.class);public void destroy() { }public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest httpReq = (HttpServletRequest) request;HttpServletResponse httpResp = (HttpServletResponse) response;httpReq.setCharacterEncoding("UTF-8");httpResp.setCharacterEncoding("UTF-8");if (httpReq.getQueryString() != null && httpReq.getMethod().equalsIgnoreCase("get")) { if (logger.isDebugEnabled())logger.debug("Intercept Query String: "+ httpReq.getQueryString());final Map
parameterMap = new HashMap
();Enumeration paramNames = httpReq.getParameterNames();while (paramNames.hasMoreElements()) {String paramName = (String) paramNames.nextElement();String[] values = httpReq.getParameterValues(paramName);for (int i = 0; i < values.length; i++) {if (values[i] != null)values[i] = new String(values[i].getBytes("ISO-8859-1"), "UTF-8");}parameterMap.put(paramName, values);}chain.doFilter(new HttpServletRequestWrapper(httpReq) {@Override public String getParameter(String name) {if (parameterMap.get(name) == null)return null;return parameterMap.get(name)[0];}@Override public Map getParameterMap() {return parameterMap;}@Override public Enumeration getParameterNames() {return Collections.enumeration(parameterMap.keySet());}@Override public String[] getParameterValues(String name) {return parameterMap.get(name);}}, response); } else {chain.doFilter(request, response);}} public void init(FilterConfig fConfig) throws ServletException { if (logger.isInfoEnabled())logger.info("GetQueryStringEncoding Filter install...");}}

红色部分不是来自原文,是我新加的。

转载于:https://my.oschina.net/mashiguang/blog/55210

你可能感兴趣的文章
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
js判断checkbox是否选中
查看>>
Eclipse中修改代码格式
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>
Hyper-V 2016 系列教程30 机房温度远程监控方案
查看>>
笔记:认识.NET平台
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
struts中的xwork源码下载地址
查看>>