コメントエリアメッセージサイト統一符号化ブロック不正文字列フィルタ不正文字列

4805 ワード

コメントエリアコメント:ハイパーリンク:

伝言板

伝言板:

トーマス生中継室伝言エリア

WordsService:@WebService("/WordsService")public class WordsService extends HttpService{protected void doGet(HttpService Request request,HttpService letResponse response)throws Service Exception,IOException{this.doPost(request,response);protected void doPost(HttpServerleRequest request,HttpServerletResponse response)throws ServerletException,IOException{///復号request.setCharacterEncoding("utf-8");///////////符号化response.setContentType("text/html;charset=utf-8");///1.受信要求パラメータcontent=request.getParameter("content");///2.結果をページresponse eに応答するresponse eに応答する.getWriter().write(content);}
Webサイトの統合符号化(Web.xmlで文字セットの解結合を実現):
web.xml:

    EncodeFilter
    cast.EncodeFilter
    
        encode
        UTF-8
    



    EncodeFilter
    /*


public class EncodeFilter implements Filter{//グローバル変数private String encodeを定義する;public void init(FilterConfig config)throwsサーブレットException{//取得した文字コードをグローバル変数encode=config.getInitParameter("encode");//config:プロファイルの情報を読み込む}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException, IOException {
    //   
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;

    // post 
    if(request.getMethod().equalsIgnoreCase("post")){
        //equalsIgnoreCase :
        request.setCharacterEncoding(encode);
    }
    response.setContentType("text/html;charset="+encode);

    chain.doFilter(servletRequest, servletResponse);
}
public void destroy() {

}

}不正文字列のブロック://ブロックを作成@WebFilter("/WordsService")/ブロックWordsService public class WordsFilter implements Filter{//後でdofilterがセットを使用するため、グローバル変数private List wordslistを宣言する;public void init(FilterConfig config)throws Service Exception{//1.プロファイルResourceBundle word=ResourceBundle.getBundle("word");//2.読み出した情報を取得String keywords=word.getString(“keywords”);//3.splitで切断する、切断した情報配列を集合中のArrayに保存する.asList wordslist = Arrays.asList(keywords.split(",")); System.out.println(「不正な辞書をロード:」+wordslist);}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException,IOException{//HttpServerletRequest request=(HttpServerletRequest)servletRequest;HttpServerletResponse response=(HttpServertResponse)servletResponse;//1.ユーザ入力情報を取得String content=request.getParameter("content");//ユーザ入力情報を取得するかどうかを確認し、バックグラウンドで/辞書を巡り、for(String word:wordslist)を取得する//ユーザーが入力した情報と辞書の情報を比較して、ユーザーが入力した情報をブロックするif(content.contains(word){//ページに応答して、友情提示response.getWriter().write(“入力した文字が敏感...”)//次はreturnを実行しません;}//放行chaindoFilter(request, response); } public void destroy{}}注:filterはなぜ下に移行するのですか?ServletRequest request;これは、子クラスのオブジェクトを親クラスに割り当てる参照です.彼の実行時のタイプは子クラスで、コンパイル時のタイプは親クラスですが、実行時に親クラスのタイプのオブジェクトが呼び出す方法が子クラスにあれば、子クラスの中の方法を実行し、コンパイル時のタイプが親クラスが呼び出す方法でなければ、エラーを報告します.
不正文字列のフィルタ:@WebFilter("/WordsServeret")public class WordsProFilter implements Filter{
private List wordList;

public void init(FilterConfig config) throws ServletException {

    //1. 
    ResourceBundle word = ResourceBundle.getBundle("word");
    //2. 
    String keywords = word.getString("keywords");

    //3. "," , 
    wordList = Arrays.asList(keywords.split(","));
    // 
    System.out.println(" :"+wordList);
}

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException, IOException {

    // 
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;

    //  request  ( )
    MyRequest myRequest = new MyRequest(request,wordList);
    // 
    chain.doFilter(myRequest, response);
}
public void destroy() {
}

} public class MyRequest extends HttpServletRequestWrapper {
private List wordList;

public MyRequest(HttpServletRequest request,List wordList) {
    super(request);
    this.wordList =wordList;
}
// 

@Override public String getParameter(//ユーザ入力データの取得//親がrequest String parameter=super.getParameter)//不正データの処理for(String word:wordList){if(parameter.contains(word)}//不正文字の数int length=word.length()//代替String TH=""""";for(int i=0;i