動的プロキシを使用すると、敏感なワードフィルタリングをオブジェクト

パッケージcom.hopetesting.web.filter 

インポートのjavax.servlet。* ;
輸入javax.servlet.annotation。WebFilter ;
輸入java.io.BufferedReader ;
輸入java.io.FileNotFoundException
輸入java.io.FileReader
インポートにjava.io.IOException ;
輸入java.lang.reflect.InvocationHandler
輸入java.lang.reflect.Methodオブジェクト
輸入java.lang.reflect.Proxyの;
輸入はjava.util.ArrayList ;
輸入はjava.util.List ;

/ **
* @author newcityman
* @date 2019年9月13日-夜07時41分
* /
@WebFilter("/ *")
SensitiveWordsFilter公共クラスフィルター{実装
公共ボイド破壊(){
}

公共ボイドのdoFilter(のServletRequest REQ 、たServletResponse RESP 、れるFilterChain鎖)ServletExceptionがスローは、IOException {
// 1、创建代理对象、增强のgetParameter方法を
ServletRequest proxy_req =(のServletRequest)プロキシ。newProxyInstance(req.getClass()のgetClassLoader()、req.getClass()でgetInterfaces() 新規のInvocationHandler(){
@Override パブリックオブジェクトを呼び出し(オブジェクトプロキシ、方法方法、[]引数オブジェクト)がThrowableを{スロー//を判断是否是のgetParameter方法


//そうである場合、のgetParameter高める方法IF(method.getName()に等しい("のgetParameter")){ //戻り値エンハンスメント値を返し// 文字列値=(文字列)Method.invoke(REQ 、引数)をIF (!値= NULL){ (STR文字列のための:リスト){ IF(value.contains(STR)){ 値= value.replace(STR "******"); } } } 戻り値; } Method.invokeリターン(REQ 、引数); } }); chain.doFilter(proxy_req 、RESP); } プライベートリストの<string> 一覧=



















ArrayListの新しい新しい<文字列>(); //設定敏感言葉ます。public void のinit(に、FilterConfig configが){ServletExceptionがスロー試し{ 真のパス// 1、ファイル取得のServletContext config.getServletContext =()のServletContextを文字列にServletContext.getRealPathのrealpath =を()「/ WEB-INF /クラス/感受性単語が.txtで」; // 2、ファイル読み取るBufferedReaderのをBR = BufferedReaderの(新しい新規FileReaderの(実パス新しい新)); // 3、各行は、ファイルリストに読み出された文字列=行NULL; 一方((ライン= br.readLine())!= NULL){ List.add(行); } br.close(); 。システムout.printlnを(リスト)














;
} キャッチ(にFileNotFoundException電子){
e.printStackTrace();
} キャッチ(IOExceptionを電子){
e.printStackTrace();
}
}

}

おすすめ

転載: www.cnblogs.com/newcityboy/p/11517618.html