<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    javajohn

    金色年華

    acegi源碼學習之用戶登錄篇

    acegi 源碼學習之用戶登錄篇

    一、查看 applicationContext-acegi-security.xml 配置文件,涉及到登錄的配置為:

    ?1

    < bean id = "authenticationProcessingFilter" class = "org.javajohn.test.plugins.security.UserAuthenticationProcessingFilter" >

    ??????? < property name = "authenticationManager" ref = "authenticationManager" />

    ??????? < property name = "authenticationFailureUrl" >

    ??????????? < value > /login.jsp?login_error=1 </ value >

    ??????? </ property >

    ??????? < property name = "defaultTargetUrl" >

    ??????????? < value > /index.jsp </ value >

    ??????? </ property >

    ??????? < property name = "filterProcessesUrl" >

    ??????????? < value > /j_acegi_security_check </ value >

    ??????? </ property >

    ??????? < property name = "userManager" ref = "userManager" />

    ??????? < property name = "rememberMeServices" ref = "rememberMeServices" />

    ??????? < property name = "exceptionMappings" >

    ??????????? < value >

    ??????????????? org.acegisecurity.AuthenticationException=/login.jsp?login_error=user_psw_error

    ??????????????? org.acegisecurity.concurrent.ConcurrentLoginException=/login.jsp?login_error=too_many_user_error

    ??????? ???? </ value >

    ??????? </ property >

    </ bean >

    ?

    ?

    2 < bean id = "authenticationManager"

    ?????? class = "org.acegisecurity.providers.ProviderManager" >

    ?????? < property name = "providers" >

    ?????????? < list >

    ????????????? < ref local = "daoAuthenticationProvider" />

    ????????????? < bean class = "org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider" >

    ????????????????? < property name = "key" value = "javajohnKey" />

    ????????????? </ bean >

    ????????????? < bean class = "org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider" >

    ????????????????? < property name = "key" value = "javajohnKey" />

    ????????????? </ bean >

    ?????????? </ list >

    ?????? </ property > ??

    ??? </ bean >

    ?

    3

    < bean id = "daoAuthenticationProvider" class = "org.acegisecurity.providers.dao.DaoAuthenticationProvider" >

    ?????? < property name = "userDetailsService" ref = "jdbcDaoImpl" />

    ?????? < property name = "userCache" >

    ?????????? < bean class = "org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache" >

    ????????????? < property name = "cache" >

    ????????????????? < bean class = "org.springframework.cache.ehcache.EhCacheFactoryBean" >

    ???????????????????? < property name = "cacheManager" >

    ???????????????????????? < bean class = "org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />

    ???????????????????? </ property >

    ???????????????????? < property name = "cacheName" value = "userCache" />

    ????????????????? </ bean >

    ????????????? </ property >

    ?????????? </ bean >

    ?????? </ property >

    ?????? < property name = "passwordEncoder" ref = "passwordEncoder" />

    ??? </ bean >

    ?

    ?

    4 < bean id = "jdbcDaoImpl"

    ????????? class = "org.acegisecurity.userdetails.jdbc.JdbcDaoImpl" >

    ??????? < property name = "dataSource" ref = "dataSource" />

    ??????? < property name = "usersByUsernameQuery" >

    ??????????? < value >

    ??????????????? select loginid,passwd,1 from users where status='1' and loginid = ?

    ??????????? </ value >

    ??????? </ property >

    ??????? < property name = "authoritiesByUsernameQuery" >

    ??????????? < value >

    ??????????????? select u.loginid,p.name from

    ??????????????? users u,roles r,permissions p,user_role ur,role_permis rp

    ??????????????? where

    ??????????????? u.id=ur.user_id and

    ??????????????? r.id=ur.role_id and

    ??????????????? p.id=rp.permis_id and

    ??????????????? r.id=rp.role_id and

    ??????????????? p.status='1' and u.loginid=?

    ??????????? </ value >

    ??????? </ property >

    </ bean >

    ?

    ?

    二、程序流程:

    1 .登錄的時候執(zhí)行的過濾為 authenticationProcessingFilter ,查看其實現(xiàn)為 org.bookStore.test.plugins.security.UserAuthenticationProcessingFilter ,該類繼承自 org.acegisecurity.ui.webapp.AuthenticationProcessingFilter ,又繼承自 org.acegisecurity.ui.AbstractProcessingFilter ,這時候看到了 doFilter() 該方法取了 web 層傳過來的 request response ,然后對登錄路徑執(zhí)行了判斷等操作,接下來執(zhí)行至 authResult = attemptAuthentication(httpRequest);

    2 .從類繼承關(guān)系上找到該方法的實現(xiàn)來自 AuthenticationProcessingFilter ,執(zhí)行的邏輯為先取出 web 層傳過來的用戶名和密碼接著將得到的信息包裝為 UsernamePasswordAuthenticationToken

    public UsernamePasswordAuthenticationToken(Object principal, Object credentials) {

    ??? super ( null );

    ??? this . principal = principal;????

    ??? this . credentials = credentials;

    ??? setAuthenticated( false );

    }

    3 .接下來執(zhí)行了 setDetails(request, authRequest); request 實例賦給 authRequest 的屬性。

    4 .調(diào)用 authenticationManager authenticate(authRequest) 方法。

    5 .程序轉(zhuǎn)至 authenticationManager 內(nèi)執(zhí)行。該類繼承自 org.acegisecurity. AbstractAuthenticationManager ,執(zhí)行方法 authenticate(authRequest)

    public final Authentication authenticate(Authentication authRequest)

    ??? throws AuthenticationException {

    ??? try {

    ??????? Authentication authResult = doAuthentication(authRequest);

    ??????? copyDetails(authRequest, authResult);

    ?

    ??????? return authResult;

    ??? } catch (AuthenticationException e) {

    ??????? e.setAuthentication(authRequest);

    ??????? throw e;

    ??? }

    }

    doAuthentication(authRequest) 來自 ProviderManager 該方法執(zhí)行了其 providers 中的方法 authenticate(Authentication authentication)

    6 .此方法中調(diào)用了 retrieveUser(username, (UsernamePasswordAuthenticationToken) authentication) 該方法內(nèi)按 web 層用戶輸入的用戶名和密碼從數(shù)據(jù)庫內(nèi)比較是否有該用戶,如果有則將其 user 表內(nèi)對應(yīng)的信息包裝為 UserDetail( 接口 , 實際為 User 的實例 ) List 對象,并將該用戶相應(yīng)的權(quán)限包裝為 GrantedAuthorityImpl 對象的 List 集合對象。至此程序返回至( 3. )繼續(xù)執(zhí)行

    7 .繼續(xù)執(zhí)行 org.acegisecurity.ui.AbstractProcessingFilter successfulAuthentication(

    HttpServletRequest request,

    HttpServletResponse response,

    Authentication authResult){

    ??? ......

    SecurityContextHolder.getContext().setAuthentication(authResult);// 將包裝好的 UsernamePasswordAuthenticationToken 對象保存至系統(tǒng)上下文

    ......

    }

    8 .登錄執(zhí)行完畢。

    posted on 2006-12-06 17:33 javajohn 閱讀(1975) 評論(3)  編輯  收藏 所屬分類: 其他類

    Feedback

    # re: acegi源碼學習之用戶登錄篇 2006-12-07 14:51

    最近在學習這個東西
    老兄多分析一下 跟進學習  回復  更多評論   

    # re: acegi源碼學習之用戶登錄篇 2007-02-06 16:07 mircle_wang

    正在 學習中 請問 它對數(shù)據(jù)庫的建表有什么特別的限制嗎?
    權(quán)限

      回復  更多評論   

    # re: acegi源碼學習之用戶登錄篇 2009-03-10 11:07 陳一

    這個不錯~ 我剛好在找這個! 在這謝過!  回復  更多評論   


    My Links

    Blog Stats

    常用鏈接

    留言簿(7)

    隨筆分類(36)

    隨筆檔案(39)

    classmate

    good blog

    企業(yè)管理網(wǎng)站

    好友

    站點收藏

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品一区二区三区四区乱码 | 亚洲欧洲日韩极速播放 | 免费看污成人午夜网站| 在线观看的免费网站无遮挡| 久久九九全国免费| 免费91麻豆精品国产自产在线观看| 亚洲精品黄色视频在线观看免费资源 | 亚洲国产电影av在线网址| 免费在线观看一级毛片| 亚洲av成人一区二区三区在线观看| 午夜亚洲福利在线老司机| 亚洲福利精品一区二区三区| 亚洲国产精品人人做人人爽| AV在线播放日韩亚洲欧| 在线精品亚洲一区二区三区| 久久亚洲综合色一区二区三区| 久久亚洲国产成人亚| 久久精品国产亚洲av水果派 | 亚洲а∨天堂久久精品| 亚洲人成影院在线观看 | 午夜dj免费在线观看| 国产大片免费观看中文字幕| 日韩亚洲精品福利| 亚洲码国产精品高潮在线| 亚洲五月六月丁香激情| 久久久久se色偷偷亚洲精品av| 亚洲狠狠色丁香婷婷综合| 免费看又黄又爽又猛的视频软件| 国产成人高清精品免费观看| 久久九九AV免费精品| 成人免费激情视频| 日韩伦理片电影在线免费观看| 免费一级一片一毛片| 亚洲精品午夜无码电影网| 亚洲国产成人久久精品影视| 亚洲成a人片毛片在线| 亚洲成在人线在线播放无码| 一级毛片免费不卡| 5555在线播放免费播放| 免费无码黄网站在线观看| 不卡一卡二卡三亚洲|