- 1.問題のシナリオ
- 、プログラムの堅牢性を向上させたサービスにバグを減らすことができ、操作するなど、スペース、改行、に、フィルタリング敏感語となる基準は非常に人気の需要です。各インターフェース処理せずにフィルタの団結を使用して、コードの保守性を改善
- 、プログラムの堅牢性を向上させたサービスにバグを減らすことができ、操作するなど、スペース、改行、に、フィルタリング敏感語となる基準は非常に人気の需要です。各インターフェース処理せずにフィルタの団結を使用して、コードの保守性を改善
- 2.カスタマイズサーブレット入力は(のみポストタイプ)取得ストリーム、およびJSON検証パラメータを達成し、パラメータは、フィルタパラメータを除去するために戻されます
- 3.実装カスタムHttpServletRequestWrapperクラス
-
パッケージcom.pld.content.manager.common。 輸入com.alibaba.fastjson.JSON; 輸入com.alibaba.fastjson.JSONArray; 輸入com.alibaba.fastjson.JSONObject; 輸入org.apache.commons.io.IOUtils。 輸入org.apache.commons.lang3.StringUtils。 輸入org.springframework.http.HttpHeaders。 輸入org.springframework.http.MediaType。 輸入javax.servlet.ReadListener; 輸入javax.servlet.ServletInputStream; インポートのjavax.servlet.http.HttpServletRequest; 輸入javax.servlet.http.HttpServletRequestWrapper; 輸入java.io.ByteArrayInputStream; インポートにjava.io.IOException; 輸入java.util.HashMapを; インポートするjava.util.Iterator; 輸入java.util.Map; 輸入java.util.Set; / ** * @author TLJ * @date 2019年8月5日 * / ParameterRequestWrapperパブリッククラスHttpServletRequestWrapperクラス{延び プライベートマップ<文字列、文字列[]> paramsは=新しい新規HashMapを<>(); 公共ParameterRequestWrapper (HttpServletRequestのリクエスト){ 対応するメソッドを呼び出すために、その出力、実際に同様のクラスの新しい父親の第1の実施の形態における要求に//親クラス スーパー(リクエスト); //パラメータテーブル地図パラメータ要求を保持するように、現在のように与えられた 地図<文字列、文字列[]> = Requestmap request.getParameterMap(); this.params.putAll(Requestmapは); } / ** *書き換え型のgetInputStream方法ポストリクエストパラメータの値は、ストリームの前に取得する必要があります * / @Override 公共サーブレット入力のgetInputStream()はIOExceptionがスロー{ 新しいMyServletInputStream(ビス)を返します。 //非JSON类型、直接返回 場合(super.getHeader(HttpHeaders.CONTENT_TYPE).equalsIgnoreCase(MediaType.APPLICATION_JSON_VALUE)!){ リターンsuper.getInputStream(); } //为空、直接返回 列JSON = IOUtils.toString(super.getInputStream()、 "UTF-8"); IF(StringUtils.isEmpty(JSON)){ super.getInputStream()を返します。 } マップの<string、オブジェクト>マップ= JSON.parseObject(JSON)。 dealMap(マップ) れるByteArrayInputStreamビス=新しいれるByteArrayInputStream(JSON.toJSONString(マップ).getBytes( "UTF-8")); } プライベートボイドdealMap(MAP <文字列、OBJECT>マップ){ セットの<string>セット= map.keySet()。 イテレータは、<文字列> ITはset.iteratorを()=; パラメータ空間の//値を除去した後、バック書き換え (it.hasNext()){しばらく ;文字キー= it.next() オブジェクトの値をmap.get =ように(キー)、 IF(文字列instanceofの値){ 値=((文字列)値).trim(); }そうIF(値JSONArrayのinstanceof){ JSONArray JSON =(JSONArray)値; !IF(json.isEmpty()){ 用(INT I = 0; I <json.size(); I ++){ JSONObjectジョブ= json.getJSONObject(I); //反復jsonarray配列、JSONへの対象物の各々 delJSONObject(ジョブ); } } } map.put(キー、値)。 } } プライベートボイドdelJSONObject(JSONObject jsonObject){ イテレータ<のMap.Entry <文字列オブジェクト>>イテレータ= jsonObject.entrySet()反復子()。 (iterator.hasNext()){一方 のMap.Entry <文字列、オブジェクト>エントリ= iterator.next()。 文字列キー= entry.getKey()。 オブジェクト値= entry.getValue()。 (文字列instanceofの値){もし 値=((文字列)値)(.trim)。 } jsonObject.put(キー、値)。 } } パブリック静的無効メイン(文字列[] args){ JSONObject jsonObject =新しいJSONObject()。 jsonObject.put( "K1"、 "V1")。 反復子<のMap.Entry <文字列オブジェクト>>イテレータ= jsonObject.entrySet()反復子()。 (iterator.hasNext()){一方 のMap.Entry <文字列、オブジェクト>エントリ= iterator.next()。 entry.getValue(); entry.getKey(); } } / ** *重写のgetParameter参数从当前类中的マッピング获取 * / @Override パブリック文字列のgetParameter(文字列名){ String []型値= params.get(名); IF(値== NULL || values.length == 0){ 戻りヌル。 } 戻り値[0]。 } / ** *重写getParameterValues * / パブリック文字列[] getParameterValues(文字列名){//同上 戻りparams.get(名); } クラスMyServletInputStreamはサーブレット入力{延び プライベートするByteArrayInputStreamビス。 公共MyServletInputStream(れるByteArrayInputStreamビス){ this.bis =ビス。 } @Override パブリックブールisFinished(){ trueを返します。 } @Override パブリックブールisReady(){ trueを返します。 } @Override 公共ボイドsetReadListener(ReadListenerリスナー){ // } @Override 公共int型リード(){ 戻りbis.read()。 } } }
-
- カスタムフィルタを実装し、フィルタ構成
-
package com.pld.content.manager.common; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * @author tlj * @date 2019/8/5 */ @Component @WebFilter(urlPatterns = "/**", filterName = "ParamsFilter",dispatcherTypes=DispatcherType.REQUEST) public class ParamsFilter implements Filter { @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { ParameterRequestWrapper parmsRequest = new ParameterRequestWrapper((HttpServletRequest) arg0); arg2.doFilter(parmsRequest, arg1); } @Override public void destroy() { } @Override public void init(FilterConfig arg0) { } }
-
フィルタパラメータの統一性チェックを使用してspringbootプロジェクトは、敏感な単語を置き換えます
おすすめ
転載: blog.csdn.net/www_tlj/article/details/98497956
おすすめ
ランキング