日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 过滤http请求头_JAVAWEB开发实现对请求头、请求参数的过滤 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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开发实现对请求头、请求参数的过滤的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。