空間站

          北極心空

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

          acegi的登陸過程

          先來無事看看acegi的登陸過濾器 寫下來當作備忘吧
          主要的類是AuthenticationProcessingFilter 繼承了AbstractProcessingFilter 這要的邏輯都在后面這個類中
          讓我們看看核心代碼吧
          Java代碼 復制代碼
          1. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,   
          2.         ServletException {   
          3.     if (!(request instanceof HttpServletRequest)) {   
          4.         throw new ServletException("Can only process HttpServletRequest");   
          5.     }   
          6.   
          7.     if (!(response instanceof HttpServletResponse)) {   
          8.         throw new ServletException("Can only process HttpServletResponse");   
          9.     }   
          10.   
          11.     HttpServletRequest httpRequest = (HttpServletRequest) request;   
          12.     HttpServletResponse httpResponse = (HttpServletResponse) response;   
          13.   
          14.     if (requiresAuthentication(httpRequest, httpResponse)) {   
          15.         if (logger.isDebugEnabled()) {   
          16.             logger.debug("Request is to process authentication");   
          17.         }   
          18.   
          19.         Authentication authResult;   
          20. /下面才是重點 上面都是些基本檢查   
          21.         try {   
          22.             onPreAuthentication(httpRequest, httpResponse);   
          23.             authResult = attemptAuthentication(httpRequest);//這個方法就是去登陸了 就是調用dao檢查用戶名密碼 登陸不成功將拋出異常   
          24.         }   
          25.         catch (AuthenticationException failed) {   
          26.             // Authentication failed   
          27.             unsuccessfulAuthentication(httpRequest, httpResponse, failed);   
          28.   
          29.             return;   
          30.         }   
          31.   
          32.         // Authentication success   
          33.         if (continueChainBeforeSuccessfulAuthentication) {   
          34.             chain.doFilter(request, response);   
          35.         }   
          36.   
          37.         successfulAuthentication(httpRequest, httpResponse, authResult);   
          38.   
          39.         return;   
          40.     }   
          41.   
          42.     chain.doFilter(request, response);   
          43. }  


          看一些登陸成功后 做些什么
          Java代碼 復制代碼
          1.     protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response,   
          2.             Authentication authResult) throws IOException {   
          3.         if (logger.isDebugEnabled()) {   
          4.             logger.debug("Authentication success: " + authResult.toString());   
          5.         }   
          6.   
          7. //把用戶信息保存到SecurityContextHolder中1980   
          8. SecurityContextHolder.getContext().setAuthentication(authResult);   
          9.   
          10.         if (logger.isDebugEnabled()) {   
          11.             logger.debug("Updated SecurityContextHolder to contain the following Authentication: '" + authResult + "'");   
          12.         }   
          13. //轉到目標頁面 即登陸成功頁面   
          14.         String targetUrl = determineTargetUrl(request);   
          15.   
          16.         if (logger.isDebugEnabled()) {   
          17.             logger.debug("Redirecting to target URL from HTTP Session (or default): " + targetUrl);   
          18.         }   
          19.   
          20.         onSuccessfulAuthentication(request, response, authResult);   
          21.   
          22.         rememberMeServices.loginSuccess(request, response, authResult);   
          23.   
          24.         // Fire event   
          25.         if (this.eventPublisher != null) {   
          26.             eventPublisher.publishEvent(new InteractiveAuthenticationSuccessEvent(authResult, this.getClass()));   
          27.         }   
          28.   
          29.         sendRedirect(request, response, targetUrl);   
          30.     }  
          posted on 2008-06-19 10:36 蘆葦 閱讀(875) 評論(0)  編輯  收藏 所屬分類: SpringJAVA
          主站蜘蛛池模板: 屯门区| 合江县| 广昌县| 广州市| 江永县| 竹北市| 河南省| 五家渠市| 峨眉山市| 嘉善县| 桓台县| 天门市| 兴仁县| 洪湖市| 政和县| 石台县| 凤台县| 右玉县| 襄垣县| 旬阳县| 崇阳县| 闻喜县| 泸西县| 长垣县| 浦江县| 乌恰县| 青岛市| 中西区| 马公市| 汤原县| 磐安县| 个旧市| 苏尼特右旗| 宿迁市| 康定县| 宕昌县| 成安县| 隆化县| 孙吴县| 苏尼特左旗| 东源县|