SpringMVCログイン検証無から有へ

4511 ワード

最近ずっとjavaWebを勉强していて、自分でプロジェクトを书いて练习してみましたが、今日はログイン検証机能を実现して、整理してノートを作りました.
この機能を実現するには、次の2つの方法があります.
  • サーブレットフィルタFilter
  • SpringMVCブロッキング
  • 私がプロジェクトで使っているのは2つ目の方法で実現しています.
    1.Interceptorブロッキングの作成
  • は、HandlerInterceptorインターフェース
  • を実現することによって実現する.
  • HandlerInterceptorAdapter抽象クラス
  • を継承することによって
  • は、WebRequestInterceptorインターフェース
  • を実現することによって実現する.
    1.1 HandlerInterceptorインタフェースの実装
    くだらないことは言わないで,直接コードをつけなさい.
    /**
     *      
     * Created by LiuZongRui on 17/2/20.
     */
    public class LoginInterceptor implements HandlerInterceptor {
    
        /**
         *      Controller        ,return false     
         */
        public boolean preHandle(HttpServletRequest httpServletRequest,  HttpServletResponse httpServletResponse, Object o) throws Exception {
            //      url
            String url = httpServletRequest.getRequestURI();
           if (StringUtils.equals(url, "/console/login.do")) {
                //     ,  
                return true;
            } else {
                HttpSession session = httpServletRequest.getSession();
                User user = (User) session.getAttribute(Constans.USER);
                if (user != null) {
                    return true;
                }
            }
            //              
            //      
            httpServletResponse.sendRedirect("/console/login.do");
            return false;
        }
    
        /**
         * Controller    ,ModelAndView          
         */
        public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        }
    
         /**
         *  ModelAndView            ,           
         */
        public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        }
     }
    

    1.2 HandlerInterceptorAdapter抽象クラスの継承
    /**
      *    HandlerInterceptorAdapter       ,       HandlerInterceptor   ,
      *          ,         。
      */
    public class LoginInterceptor extends HandlerInterceptorAdapter {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            super.preHandle(request, response, handler);
            return false;
        }
    }
    

    1.3 WebRequestInterceptorインタフェースの実装
    public class LoginWebInterceptor implements WebRequestInterceptor {
        /**
         *         ,               ,               WebRequest 。
         *  HandlerInterceptor preHandle   ,      。
         */
        public void preHandle(WebRequest webRequest) throws Exception {
            //     request    ,           request      
            request.setAttribute("request", "request", WebRequest.SCOPE_REQUEST);
            //     session    ,                       ,                   
            request.setAttribute("session", "session", WebRequest.SCOPE_SESSION);
            //        ,             ,                
            request.setAttribute("globalSession", "globalSession", WebRequest.SCOPE_GLOBAL_SESSION); 
        }
        /** 
         *      Controller    ,        ,ModelMap    Controller       Model  ,      
         *        ModelMap   ,              。 
         */  
        public void postHandle(WebRequest webRequest, ModelMap modelMap) throws Exception {
        }
        public void afterCompletion(WebRequest webRequest, Exception e) throws Exception {
        }
    }
    

    SpringMVCブロッキングの3つの実現方法をまとめた.万変はその中から離れず,要求の3段階に対してブロックし,対応する操作を行う.ログイン認証機能を実装する場合、preHandle()メソッドを処理するだけでよいため、リソースデータの準備に使用されるため、3つ目の方法は望ましくない.
    2.spring-mvcのxmlプロファイルでブロッカーを構成する
    ダイレクトコード
    
    
        
        
            
            
            
            
        
    
    

    構成コードは分かりやすいが、マッピングパスは、というすべてのリクエストに一致するのではなく、ルートディレクトリを表す第1レベルのリクエストである.リクエストパスが:http://localhost:8080/project/path1であれば、上記の構成でブロックでき、リクエストパスが:http://localhost:8080/project/path1/path2であれば、上記の構成ではブロックできない.構成を変更する必要がある.をブロックしたいが、http://localhost:8080/project/path1/path2をブロックしたくない場合は、http://localhost:8080/project/path2/path1として構成することができる.
    SpringMVCブロッキングによりログインブロッキング機能を非常に容易に実現できます.以上がすべての実装コードですが、2つの問題があり、紙面の都合で別の文章を書いて記録します.