リクエストボディミス本体を読みspringwebフィルターを解きます

パッケージcom.lb.demo.listener。

輸入java.io.BufferedReader; 
輸入java.io.ByteArrayInputStream。
インポートにjava.io.IOException; 
輸入java.io.InputStreamReader。

輸入javax.servlet.ReadListener。
輸入javax.servlet.ServletInputStream。
インポートのjavax.servlet.http.HttpServletRequest; 
輸入javax.servlet.http.HttpServletRequestWrapper。
/×××× 
×
×
×
×添加此类
×
×
×
×××××××/
パブリック クラスBodyReaderHttpServletRequestWrapperはHttpServletRequestWrapperクラス{延び プライベート最終バイト []本体と、// 用于保存读取体の中の数据の 公共BodyReaderHttpServletRequestWrapper(HttpServletRequestのリクエストは)のIOException {スロー スーパー(要求)。 StringBufferのSB = 新しいStringBufferを(); 文字列のTEMP = nullを BufferedReaderのbufferread = request.getReader()。 一方、((TEMP = bufferread.readLine())!= NULL ){ sb.append(TEMP)。 } 本体 = sb.toString()GetBytesメソッド()。 bufferread.close(); } @Override 公共BufferedReaderのgetReaderは()のIOException {スロー リターン 新しいをBufferedReader(新しいInputStreamReaderの(のgetInputStream())); } @Override 公共サーブレット入力のgetInputStream()のIOException {スロー 最終れるByteArrayInputStream BAIS = 新しいするByteArrayInputStream(本体) 返す 新しいサーブレット入力を(){ @Override 公共 int型の読み取り()はIOException {スロー リターン)(bais.readを。 } @Override 公共isFinishedブール(){ // TODO自動生成方法のスタブを 返す ; } @Override パブリックブールisReady(){ // TODO自動生成方法スタブ リターン } @Override 公共 ボイドsetReadListener(ReadListener arg0に){ // TODO自動生成方法スタブ } }。 } }
パッケージcom.lb.demo.listener。

輸入java.io.BufferedReader; 
インポートにjava.io.IOException; 

輸入れるjavax.servlet.FilterChain。
輸入javax.servlet.ServletException; 
輸入javax.servlet.ServletRequest; 
インポートのjavax.servlet.ServletResponse。
輸入javax.servlet.http.HttpFilter。
インポートのjavax.servlet.http.HttpServletRequest; 

輸入org.apache.commons.logging.Log; 
輸入org.apache.commons.logging.LogFactory; 
輸入org.springframework.stereotype.Component。
/×××× 
×
×
×
×修改フィルタ
×
×
××××××××××/
@Component
パブリック クラスMyServletFilterはHttpFilter延び{ 文字列のparam = "" ; プライベートログログ= LogFactory.getLog(MyServletFilter。クラス); 公共 ボイド(破壊){ // TODO自動生成方法スタブ } @Override 公共 ボイドのdoFilter(のServletRequest要求は、ServletResponseを応答は、鎖れるFilterChain)は IOExceptionがスロー、ServletExceptionが{ のServletRequest requestWrapper = NULL ; requestWrapper = 新しい BodyReaderHttpServletRequestWrapper((HttpServletRequestの)要求)。// 替换 PARAM = この.getBodyString(requestWrapper.getReader())。 log.info(" フィルタ读取体中的参数>>>>>>>>> " + PARAM)。 chain.doFilter(requestWrapper、応答)。 } パブリック 静的文字列getBodyString(BufferedReaderののBR){ 文字列inputLine。 文字列str = "" ; してみてください{ しばらく((inputLine = br.readLine())!= nullの){ STR + = inputLine。 } br.close()。(例外:IOException e)の{ システム。アウト .println(" IOExceptionが:" + e)前記 } 戻りSTR。 } }

 

おすすめ

転載: www.cnblogs.com/libing029/p/11210766.html