WebプログラムにIPフィルタを付ける


サーブレットフィルタの概要
Webアプリケーションではフィルタを使用してすべてのアクセスと要求を処理できます.サーブレットフィルタはクライアントとターゲットリソースの中間層にあります.サーバがクライアント要求を受信すると、まず要求がフィルタオブジェクトに関連付けられているかどうかを判断し、もしそうであれば、要求をフィルタに渡して処理する.処理が終わったら、他の業務に任せる.
すべての業務処理が完了し、応答をクライアントに返す必要がある場合、コンテナは同様に応答をフィルタに渡して処理し、フィルタ処理が完了したらクライアントに返す.
なお、フィルタは、文字符号化フィルタ、IPアクセスフィルタなど、1つ以上であってもよい.コンテナは、まずクライアント要求を最初のフィルタ処理に渡し、次のフィルタに渡します.戻ると、最後のレベルのフィルタから前に渡され、最後に最初のレベルのフィルタからクライアントに応答が返されます.
フィルタコード構造
サーブレットと同様に、オブジェクトをフィルタにするにはFilterインタフェースを実装する必要があります.Filter APIは主に3つのインタフェースに関連する.
  • Fileterすべてのフィルタオブジェクトは、インタフェース
  • を実装する.
  • FilterChainは、主に要求または応答を次のフィルタオブジェクトに渡すために使用され、このインタフェースは、コンテナによって実装される
  • である.
  • FilterConfigは、容器によって実現する
  • の初期化パラメータ情報を取得するために使用される.
    フィルタコードの構造は次のとおりです.
    import javax.servlet.*;
    import java.io.IOException;
    
    public class FilterEg implements Filter {
    
        //      。       ,             。  Servlet init()
        public void init(FilterConfig config) throws ServletException {
        }
    
        //    /       。  Servlet service()
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
            //  FilterChain   doFilter  ,   /          
            chain.doFilter(request, response);
        }
    
        //  Servlet destroy()  
        public void destroy() {
    
        }
    }

    指定IPをブロックするフィルタ
    フィルタコード
    まず、フィルタのコード構造に従って、次のフィルタコードを記述します.
    IPFilter.java
    pacakge filter
    
    import javax.servlet.*;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class IPFilter implements Filter {
    
        protected FilterConfig config;
        protected String IP;
    
        //     。
        public void init(FilterConfig config) throws ServletException {
            this.config = config;
            //        IP  。
            IP = config.getInitParameter("IP");
        }
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            //     IP  
            String remoteIP = request.getRemoteAddr();
            //     IP      IP  
            if(remoteIP.equals(IP)) {
                response.setCharacterEncoding("gb2312");
                PrintWriter out = response.getWriter();
                out.print("

    25

    ">IP !"); }else { // IP , chain.doFilter(request, response); } } public void destroy() { } }

    フィルタ構成
    サーブレットと同様に、フィルタを使用する前に構成する必要があります.上のコードでIPを制限している情報はここで読み込まれます.
    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <filter>
            <filter-name>IPFilterfilter-name>
            <filter-class>filter.IPFilterfilter-class>
            <init-param>
                <param-name>IPparam-name>
                <param-value>127.0.0.1param-value>
            init-param>
        filter>
        <filter-mapping>
            <filter-name>IPFilterfilter-name>
            <url-pattern>/*url-pattern>
        filter-mapping>
    web-app>

    filter-name、filter-classはいずれもサーブレット構成と類似しており、簡単なサーブレットプログラムのxml構成を参照することができます.
    9~12行に初期化パラメータを設定し,コード中のinit()メソッドはここのIPパラメータを読み出す.ここではIPを127.0とする.0.1を使用して、ネイティブのアクセスをフィルタリングします.
    フィルタが有効なアクセスパスを示す16行、/*はすべてのリクエストに有効であることを示します.
    プログラム配置実行
    JSP+JavaBean+Servicelet MVCモードのユーザー登録モジュールのコードを初心者がお勧めします.登録モジュールにIPフィルタを追加します.
    WebappsregWEB-INFclassesディレクトリの下にfilterフォルダを新規作成します.上のIPFilterをJAvaコンパイルはfilterフォルダに格納されます.
    WEB-INFパスの下のweb.xmlにフィルタを追加する構成:
    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <servlet>
                <servlet-name>SignInServletservlet-name>
                <servlet-class>service.SignInServletservlet-class>
        servlet>
        <servlet-mapping>
            <servlet-name>SignInServletservlet-name>
            <url-pattern>/RegServleturl-pattern>
        servlet-mapping>
    
        <filter>
            <filter-name>IPFilterfilter-name>
            <filter-class>filter.IPFilterfilter-class>
            <init-param>
                <param-name>IPparam-name>
                <param-value>127.0.0.1param-value>
            init-param>
        filter>
        <filter-mapping>
            <filter-name>IPFilterfilter-name>
            <url-pattern>/*url-pattern>
        filter-mapping>
    
    web-app>

    15~26動作私たちが加えたフィルタ構成.
    では、次にTomcatを実行し、ブラウザ入力を開きます
    http://localhost:8080/reg/reg.jsp
    

    次のページが表示されます.
    フィルタは私たちの本体のIPをブロックしました.
    次はweb.xmlファイルでは、127.0.0.1のIPを別のアドレスに変更します.
    サーバーを再起動し、ブラウザ入力を開く
    http://localhost:8080/reg/reg.jsp
    

    ページが正常に戻ります.