要件:
図1は、データ入力day17_caseケースは敏感ワードフィルタである
2、SRC敏感字句基準パス下の「.txtの敏感な単語」
***それは敏感である場合、単語、置換3
分析:
1、強化され、要求に従います。法適用関連獲得パラメータ強化
2、リリースを。配信エージェントオブジェクト
コードの実装:
1つの インポートorg.springframework.cglib.proxy.InvocationHandler。
2 インポートorg.springframework.cglib.proxy.Proxy。
3
4 インポートのjavax.servlet。* ;
5 輸入javax.servlet.annotation.WebFilter。
6 インポートjava.io.BufferedReader。
7 インポートjava.io.FileReader。
8 インポートにjava.io.IOException;
9 インポートjava.lang.reflect.Methodオブジェクト。
10 インポートjava.util.ArrayListの。
11 インポートjava.util.Listに。
12
13 / **
14 *敏感词汇过滤器
15 * /
16 @WebFilterは( "/ *" )
17の パブリック クラス SensitiveWordsFilterが実装フィルタ{
18
19
20 公共の ボイドのdoFilter(のServletRequest REQ、たServletResponse RESP、れるFilterChain鎖)スローServletExceptionが、IOExceptionが{
21 // 1创建代理对象、增强のgetParameter方法
22 のServletRequest proxy_req =(のServletRequest)たとえば、Proxy.newProxyInstance(req.getClass()のgetClassLoader()、req.getClass()でgetInterfaces()、新規のInvocationHandler(){
23 @Override
24 公衆(オブジェクトO、メソッド、メソッド、[]引数オブジェクト)オブジェクトを呼び出すスローのThrowable {
25
26である // のgetParameter強調方法
27 //の方法があるかどうかを決定する
28 IF(等号( "のgetParameter"。method.getName(){))
29 // 拡張戻り値
30 //の値を返し
31である 文字列値= (文字列)Method.invoke(REQ、引数);
32
33は、 IF(値!= NULL ){
34がある ため(STR文字列:リスト){
35 IF (値.Contains(STR)){
36 = value.replaceAll値(STR、 "***" );
37 }
38である }
39 }
40
41であり 、戻り 値は、
42である }
43である
44れる 戻りMethod.invoke(REQ、引数を);
45 }
46である });
47 // 2リリース、配信プロキシオブジェクト増強
48
49 chain.doFilter(proxy_req、RESPを);
50 }
51は、
52である
53である プライベートリストの<string>一覧= 新しい新ArrayListの<文字列>(); // 敏感なワードがセット
54がある 公共 のボイドのinit(に、FilterConfig configが)スローServletExceptionが{
55
56は
57で 試して{
58 // 1つのロードファイル。
59 // 実際のパスファイルの取得
60 のServletContext =のServletContext config.getServletContext( );
61である 文字列のrealpath =にServletContext.getRealPath( "/ WEB-INF /クラス/感受性単語が.txtで" );
62である // 2ファイル読み込み
63である
64 BufferedReaderのBR = 新しい新しい BufferedReaderの(新しい新FileReaderの(実パス));
65
66 // ファイル3の各ラインは、リストに追加された
67
68 列ライン= NULL ;
69 ながら((ライン= br.readLine())!= NULL ){
70 List.add(ライン);
71である }
72
73である )(br.close;
74
75 のSystem.out.println(一覧);
76 } キャッチ(例外E){
77 e.printStackTrace();
78 }
79
80 }
81
82
83 公共 ボイドは(){破棄
84 }
85
86 }