1、服务器容器取得客户端发送的参数都是通过HttpServletRequest来获取的,HttpServletRequest存在如下三种获取参数的方法:

getParameter(name),返回单个值。

getParameterValues(name),返回一个数组。

getParameterMap(),把客户端提交参数封装为一个Map返回。K:name,V:value。

当我们使用servlet的时候一般都是使用前两种,struts1使用的第2种,struts2(xwork)则使用的第3种 。

2、 根据JavaEE servlet2.5规范要求,ServletRequest.getParameterMap()需返回一个immutable(不可改变)的java.util.Map实现,tomcat在这方面没有严格遵照规范,而weblogic严格遵照规范。JavaEE规范之所以这样要求,是出于“安全因素”的考虑。规范描述如下:

public java.util.Map getParameterMap()

Returns a java.util.Map of the parameters of this request. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.

Returns: an immutable java.util.Map containing parameter names as keys and parameter values as map values. The keys in the parameter map are of type String. The values in the parameter map are of type String array.

3、对 2 中描述的情况进行代码调整,已在tomcat、weblogic下验证过,其中包括:请求装饰类、过滤器、web.xml下配置过滤器:

请求装饰类:JzHttpServletRequest

package com.juno.fw.wrapper;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.lang3.StringUtils;

/**

* 使用装饰模块模式(Decorator)包装HttpServletRequest对象,实现请求头、请求参数的特定字符转义功能。

*

* @author Juno

* @since 1.6

* @version 1.0

* @date 2016.04.14

* @date Juno update at 2016.12.05

*/

public class JnHttpServletRequest extends HttpServletRequestWrapper {

public HttpServletRequest request;

public Map params = new HashMap();

public JnHttpServletRequest(HttpServletRequest request) {

super(request);

this.request = request;

// 创建对象时,将immutable请求对象MAP复制到本实例的内部对象params中

// 通过过滤params以实现过虑请求参数的特定字符

this.params.putAll(request.getParameterMap());

}

@Override

public String getHeader(String name) {

String value = this.request.getHeader(name);

if (value == null) {

return null;

}

return filterDatas(value);

// return super.getHeader(name);

}

@Override

public String getParameter(String name) {

String value = super.getParameter(name);

if (value == null) {

return null;

}

return filterDatas(value);

// return super.getParameter(name);

}

@Override

public String[] getParameterValues(String name) {

String[] values = super.getParameterValues(name);

if (values != null) {

for (int i = 0; i < values.length; i++) {

values[i] = filterDatas(values[i]);

}

}

return values;

// return super.getParameterValues(name);

}

/*

* STRUTS2调用此方法获取请求参数

*

* WEBLOGIC下不允许修改request.getParameterMap()返回的MAP对象

*

*

* @see javax.servlet.ServletRequestWrapper#getParameterMap()

*/

@Override

public Map getParameterMap() {

// HashMap paramMap = (HashMap) super.getParameterMap();

for (Iterator> iterator = params.entrySet().iterator(); iterator.hasNext(); ) {

Map.Entry entry = (Map.Entry) iterator.next();

String[] values = (String[]) entry.getValue();

for (int i = 0; i < values.length; i++) {

if (values[i] instanceof String) {

values[i] = filterDatas(values[i]);

}

}

entry.setValue(values);

}

return params;

// super.getParameterMap();

}

/**

* 过滤参数内容中的敏感字符

*

* @param input 被过滤字符串

* @return

* @author Juno add at 2016.09.05.

* @author Juno update at 2016.12.05.

*/

private String filterDatas(String input) {

if (StringUtils.isBlank(input)) {

return "";

}

// 过滤敏感字符

return input.replaceAll("\\s+\'|\'\\s+|\\s+\"|\"\\s+||(?i)\\s+or\\s+|(?i)\\s+and\\s+|(?i)exec\\s+|(?i)insert\\s+|(?i)select\\s+|(?i)delete\\s+|(?i)update\\s+|(?i)count\\s+|(?i)chr\\s+|(?i)mid\\s+|(?i)master\\s+|(?i)truncate\\s+|(?i)char\\s+|(?i)declare\\s+|(?i)script\\s+|(?i)frame\\s+|(?i)etc\\s+|(?i)style\\s+|(?i)expression\\s+", "");

}

}

过滤器类:

package com.jz.org.filter;

import java.io.IOException;

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 com.jz.org.wrapper.JzHttpServletRequest;

/**

* HTTP请求头、请求参数等的转义过滤器

*

* @author Juno

* @since 1.6

* @version 1.0

* @date Juno add at 2016.04.14

*/

public class JzServletRequestFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest httpServletRequest = (HttpServletRequest) request;

JzHttpServletRequest jzHttpServletRequest = new JzHttpServletRequest(httpServletRequest);

chain.doFilter(jzHttpServletRequest, response);

}

public void init(FilterConfig filterConfig) throws ServletException {

}

public void destroy() {

}

}

过滤器配置:

JzServletRequestFilter

com.jz.org.filter.JzServletRequestFilter

JzServletRequestFilter

/*

java 过滤http请求头_JAVAWEB开发实现对请求头、请求参数的过滤相关推荐

  1. java get post乱码处理_JavaWeb 之 GET请求和POST请求的乱码问题

    一.乱码的原因 乱码:当编码与解码不一致时,就会出现乱码的情况.(本质:编解码不一致) 根据乱码又可分为: (1)请求乱码:客户端编码与服务器解码不一致 (2)响应乱码:服务器编码与客户端解码不一致 ...

  2. ajax get请求_python测试开发django50.jquery发送Ajax请求(get)

    前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...

  3. oracle ebs 提交请求,EBS Form开发中点击按钮提交请求报表的实现方式--fnd_request.submit_request...

    --submit the request l_req_id_fee := fnd_request.submit_request('PO', 'REQIMPORT', '', '', FALSE, 'P ...

  4. java环境搭好 软件无法运城_Javaweb开发环境搭建常用工具类型

    随着互联网的不断发展,无论是前端开发还是后端开发都越发垂直细分化,而今天我们就通过案例分析来了解一下,Javaweb开发环境搭建常用工具类型. 一:Web相关概念 Web程序也就是一般所说的网站,由服 ...

  5. 使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化音乐推荐系统 在线音乐推荐网站 基于用户、项目的协同过滤推荐算法实现MusicRecommendSystemWeb

    使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化音乐推荐系统 在线音乐推荐网站 基于用户.项目的协同过滤推荐算法实现MusicRecommendSystemWeb ...

  6. 使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化职位推荐系统 招聘推荐系统 基于用户、项目的协同过滤推荐算法实现WebPositionCFRS

    使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化职位推荐系统 招聘推荐系统 基于用户.项目的协同过滤推荐算法实现WebPositionCFRS 一.项目简介 1. ...

  7. java 请求转发_javaweb之请求的转发和重定向

    1.什么是请求转发和请求重定向? 请求转发: xxServlet收到请求,然后直接转发给yyServlet,然后yyServlet返回给客户端.整个过程中,客户端发出一个请求,收到一个响应. 重定向: ...

  8. Java笔记二十四——Spring开发

    Spring是一个支持快速开发Java EE应用程序的框架.它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备. 在Spring Frame ...

  9. java安装找不到uri,【找不到与请求 URI匹配的 HTTP 资源】(转)

    在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler), Web Service SOAP协议的,数据格式是XML,HTTP协议 WCF 基于SOAP的 ...

最新文章

  1. 拿到饿了么 P7 Offer,却一轮游途虎……
  2. npm 发布包填坑指南
  3. NetBeans 时事通讯(刊号 # 55 - May 06, 2009)
  4. Redis 启动与授权
  5. 2018值得一看的GAN论文回顾
  6. 监控ajax上传进度
  7. sklearn报错DeprecationWarning: the imp module is deprecated in favour of importlib
  8. Windows服务器管理(4)——WinServer2008/2008R2系统 安装AD域控及DNS服务器
  9. schema中字段类型的定义
  10. 单片机c语言程序设计实训100例基于pic pdf,单片机C语言程序设计实训100例 基于AVR+Proteus仿真.pdf...
  11. mac 中 将Pdf文件转kindle格式mobi文件教程
  12. 手机游戏模型c语言提取,(游戏中模型资源的抓取软件)ninja ripper的使用方法...
  13. flash 磨损均衡处理
  14. python 处理大数据
  15. 带你玩东方系列(视频版)游戏链接
  16. 基于51单片机的硬币电子秤的实现
  17. SQL service基础(九)用户定义数据类型和用户定义函数的概念、创建及使用方法
  18. 订单发货地址修改php,拼多多发货地址可以修改吗?怎么合并发货?
  19. Oracle 12c以下版本RAC与Redhat Linux的avahi-daemon服务的水火不容
  20. Python实现整蛊恶搞程序生成exe文件小弹窗祝福发给好兄弟好闺蜜好室友

热门文章

  1. 孙宇晨:区块链行业势必迎来光明的未来
  2. 在PowerShell中将QuickBooks在线数据导入QuickBooks桌面
  3. 【报告分享】2021百度快消人群洞察-百度营销研究院(附下载)
  4. Step Hero NFT奇幻主题游戏
  5. java mp3静音检测,音频自动增益 与 静音检测 算法 附完整C代码
  6. 冬季六种低热量时蔬助你排毒
  7. 数据结构与算法学习库——DSA
  8. 录屏时计算机休眠,硬盘录像机里硬盘提示休眠,什么意思?
  9. Win10安装CUDA和cuDNN教程
  10. 如何使用python编程、字典中的get是什么_详细解析python字典get()实例教程