【フィルタ】

メインページのアクセス制御

関連する技術知識ポイント

フィルタ

フィルタ

  1. WEBアプリケーションの場合、フィルターはサーバーに常駐するWEBコンポーネントであり、クライアントとWEBリソース間の要求および応答情報をインターセプトできます。WEBリソースには、サーブレット、JSP、HTMLページなどが含まれる場合があります。

  2. サーバーは特定の要求を受信すると、最初にその要求をフィルターに渡します。プログラマーは、フィルター内の要求情報を読み取って変更してから、要求情報をターゲットリソースに送信できます。ターゲットリソースが応答した後、サーバーは応答をフィルターに再度転送します。フィルターでは、応答情報に対していくつかの操作を実行してから、サーバーに応答を送信することもできます。

  3. つまり、フィルターは、WEBリソースが要求を受信する前、およびブラウザーが応答を受信する前に、要求および応答情報に対して対応する操作を実行できます。

  4. 複数のフィルターをWEBアプリケーションにデプロイできます。複数のフィルターがフィルターチェーンを形成します。要求と応答は、ターゲットに到達する前に複数のフィルターを通過する必要があります。

ここに画像の説明を挿入

  1. ブラウザリクエストはフィルタ1、2、3で処理された後、サーブレット処理に入ります。処理が完了すると、同じようにブラウザに戻ります。つまり、3、2、1から戻ってきます。サーブレットから。

フィルタの使用

  1. Filterインターフェースを実装することにより、完全なフィルター開発
@WebFilter(filterName = "LoginFilter",urlPatterns = "/*")
public class LoginFilter implements Filter {
    
    
    public void destroy() {
    
    
        System.out.println("LoginFilter 过滤器摧毁了......");
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    

    }

    public void init(FilterConfig config) throws ServletException {
    
    
        System.out.println("LoginFilter 过滤器初始化了......");
    }

}
  1. フィルタは、上記のコードのように注釈で構成できます。また、xmlファイルでも構成できます。次のように:

ここに画像の説明を挿入

  1. ここでは、login.jspページが正常にログインした場合にのみ、main.jspページに入りたいと思います。そうでない場合、main.jspに直接入ることができないため、main.jspページをフィルタリングする必要があるため、url = patternを記述できます。 as / main.jspここに/ *を入力して、すべてのインターフェイスを除外します。フィルタ条件は、フィルタクラスで実装できます。フィルタ条件は、実際にはdoFilterで実装されます。コードは次のとおりです。
@WebFilter(filterName = "LoginFilter",urlPatterns = "/*")
public class LoginFilter implements Filter {
    
    
    public void destroy() {
    
    
        /*初始化成功在控制台输出*/
        System.out.println("LoginFilter 过滤器摧毁了......");
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    
    
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        System.out.println("URI:"+request.getRequestURI());
        System.out.println("URL:"+request.getRequestURL());
        String url = request.getRequestURL().toString();
        /*判断过滤的要求*/
        if(url.endsWith("/main.jsp")){
    
    
            /*如果没有登陆就想直接进入主页面,那么就过滤跳转到登录界面*/
            response.sendRedirect("login.jsp");
        }else{
    
    
            /*如果直接进入的不是主页面,那么就放行*/
            chain.doFilter(request, response);/*保证使用的是同一个request,response对象*/
        }

    }

    public void init(FilterConfig config) throws ServletException {
    
    
        /*销毁之前在控制台输出*/
        System.out.println("LoginFilter 过滤器初始化了......");
    }

}

このようにして、フィルター条件が実現されます。

メインページのアクセス制御要件

  1. メインページに入るときにログイン状態を判断する必要があります。ログインしていない場合は、メインインターフェースに入ることができません。

  2. ログインステータスの判断は、より用途が広くプラグイン可能なフィルターに実装されています。

おすすめ

転載: blog.csdn.net/weixin_43215322/article/details/109450878