SSMフレームワークは、ユーザーのログインインターセプタとフィルタを実装します

主な記事は、ユーザーがログインしていないときに、システムがアクセスすることはできませんページを傍受することができますインターセプター/フィルタによるユーザー認証ログインプロセスを達成することです

:インターセプタ

ここではどのようにカスタムインターセプタプロジェクトディレクトリの実装は次のとおりです。

1:LoginInterceptorインターセプタクラスを作成し、新しいインターセプターインターセプターパッケージを作成します。

2:このクラスはHandlerInterceptorインタフェースを継承し、このインターフェイスHandlerInterceptorを達成するための3つの方法

インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;
輸入javax.servlet.http.HttpSession。

輸入org.springframework.web.servlet.HandlerInterceptor。
輸入org.springframework.web.servlet.ModelAndView。

パブリック クラス LoginInterceptorは実装HandlerInterceptor { 
 
    @Override 
    公共 ボイドafterCompletion(HttpServletRequestのarg0に、HttpServletResponseのARG1、オブジェクトARG2、例外ARG3)が
             スロー例外{
         // 执行完毕、返回前拦截         
    } 
 
    @Override 
    公開 無効postHandleは(HttpServletRequestのarg0に、HttpServletResponseのARG1、ARG2オブジェクト、のModelAndViewのARG3)が
             スロー例外{
         // プロセスにおいては、傍受するために実行         
    } 
 
    @Override 
    パブリック ブールザpreHandle(HttpServletRequestのリクエスト、レスポンスHttpServletResponseのオブジェクトARG2)がスロー例外{
         // 遮断を傍受インターセプトポイントが実行されていない場合は、操作(成功傍受)を行う前にポイントがtrueを返す
         // falseを傍受が行われていない返す 
        HttpSessionのセッション= )でrequest.getSession(; 
        文字列のURL = request.getRequestURI(); // ログインのためのURIは、これが傍受しない    
         //(! - !1 || url.indexOf( "login.action")= - !1 session.getAttribute( "_ CURRENT_USER")= NULL || url.indexOf( "home.action")=){IF 
        IF(セッション!.getAttribute( "_ CURRENT_USER")= ヌル){
             // ブロックしていませんログイン成功
            リターン trueにし; 
        } {
             // ログインページの入力インターセプト後 
            response.sendRedirect(request.getContextPath()+ "/ home.actionを" );
             リターン falseに; 
        } 
    } 
}

 

3:インターセプタは次のようにバネmvc.xml構成ファイルに配置され、このクラスに、構成されるべきです。

    < MVC:インターセプタ> 
        < MVC:インターセプタ> 
            <! - すべてのコントローラのMVCをインターセプト- > 
            < MVC:マッピングパス= "/ **" /> 
<! -              MVC:除外切片をマッピングすることは、別のあります、傍受されていない、あなたの後のテストでページすることができ、そう行かない
                リクエストURIアドレスがpreHandlerのLoginInterceptor内(優先)メソッドをインターセプトしません取得する- > 
            < MVC:exclude-マッピングパスを=「/ホーム.action "  /> 
            < MVC:-mapping除外するパス=" / login.action "  /> 
            < 豆のクラス=" cn.itcast.util.LoginInterceptor " > </ >            
        </ MVC:インターセプター> 
    </ MVC:インターセプタ>

 

内部に構成されたランディングインターセプタクラスLoginInterceptor、

このインターセプタは2つの知識ポイントがあります。

①:

< MVC:マッピングパス=「/ **」/> 後には、内部の構成の傍受で、ページをブロックしたくない場合は、すでに、ログインを含むすべての要求を、ブロックされている 
 < MVC:exclude-マッピングパスを=「/ログイン。アクション"  />

②:コンフィギュレーション・ファイルには、クラス内の傍受をインターセプトするパスを取得するためにページ要求をインターセプトして、判断を下すことはできません

//文字列のuri = request.getRequestURI(); // ログインURIを取得し、これを傍受することはない
        //if(session.getAttribute("LOGIN_USER")!=null || uri.indexOf(「/ login.actionを!「)= - 1)

II:フィルタ

二つのステップにフィルター:新しいフィルタクラスを作成し、構成のweb.xml

LoginFilterクラス、クラスの継承フィルターを構築

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {
 
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;
        HttpSession session = request.getSession();
        
/*        if(session.getAttribute("_CURRENT_USER") != null){
            arg2.doFilter(arg0, arg1);
            return;
        }
        if(request.getRequestURI().indexOf("home.action") != -1 || request.getRequestURI().indexOf("login.action") != -1){
            arg2.doFilter(arg0, arg1);
            return;
        }
        // 没有登录
        response.sendRedirect(request.getContextPath()+"/home.action");*/

        if(session.getAttribute("_CURRENT_USER")==null && request.getRequestURI().indexOf("/home.action") == -1
                    && request.getRequestURI().indexOf("/login.action") == -1 // -1表示不存在该url
                ){
            // 没有登录
            response.sendRedirect(request.getContextPath()+"/home.action");
        }else{
            // 已经登录,继续请求下一级资源(继续访问)
            arg2.doFilter(arg0, arg1);
        }
    }
 
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }
     
    public void destroy() {
        // TODO Auto-generated method stub
    }
}

 

2:配置 web.xml ,在字符过滤器下面接着配置一个过滤器

    <!-- 5.使用filter实现登录控制 -->
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>cn.itcast.util.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <!-- 所有的管理页面需要登录后才能访问 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

将过滤器类  LoginFilter  配置到 过滤器配置文件中,即可完成

过滤器也实现了

 

内容大部分来自https://blog.csdn.net/chenxihua1/article/details/80779234 感谢大佬分享!

おすすめ

転載: www.cnblogs.com/SI0301/p/11261107.html