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

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

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

    隨筆-11  評論-16  文章-1  trackbacks-0
    -------------------------------------------- 總大綱 --------------------------------------
    Ralasafe是基于MIT協(xié)議開源的,數(shù)據(jù)級權(quán)限管理中間件。開源有段時間了,大約有2個月了。根據(jù)社區(qū)的反饋,我打算圍繞Ralasafe最佳實踐,書寫一系列BLOG。
     
    大體內(nèi)容有:
    1, 登錄控制: 哪些頁面需要登錄后才能訪問,登錄用戶名、密碼驗證,登錄轉(zhuǎn)向頁面;
    2, URL權(quán)限控制:哪些頁面訪問需要進行角色權(quán)限驗證,怎樣驗證最簡單有效,如何處理驗證失敗情況;
    3, 數(shù)據(jù)級權(quán)限管理方案探討:選擇中間件呢還是框架?
    4, Ralasafe體系結(jié)構(gòu): 用戶怎么讀取,用戶有哪些字段,怎樣與應(yīng)用基礎(chǔ);
    5, 數(shù)據(jù)級查詢權(quán)限管理: 如何給不同的人分配不同的查詢數(shù)據(jù)權(quán)限,返回where條件呢,還是直接返回結(jié)果集?
    6, 數(shù)據(jù)級決策權(quán)限管理: 如何給不同的人分配不同的數(shù)據(jù)操作權(quán)限,當用戶不具備權(quán)限怎么辦?
    7, 其他細小的權(quán)限控制: 如下拉框顯示內(nèi)容;按鈕、鏈接是否顯示,圖片是否顯示等。
    -------------------------------------------- ------- --------------------------------------
     
    今天說的登錄控制,內(nèi)容主要有:哪些頁面需要登錄控制、登錄驗證邏輯、登錄后頁面轉(zhuǎn)向哪里,以及權(quán)限菜單等問題。雖然本系列講解權(quán)限管理,尤其是數(shù)據(jù)級權(quán)限管理。但嚴格意義來說,登錄控制,并不屬于權(quán)限管理內(nèi)容。它屬于用戶身份認證內(nèi)容。權(quán)限基本都與用戶相關(guān),用戶首先就涉及到用戶名密碼驗證。所以我們從這里開始說起。
     
    需求考察

    仔細考察登錄控制,無外乎這些需求:
    1,哪些頁面需要登錄后才能查看,而且哪些頁面還需要進一步驗證角色權(quán)限;
    2,登錄頁面在哪里?
    3,登錄用戶名、密碼驗證;
    4,登錄后轉(zhuǎn)向哪個頁面?

    分析清楚需求后,我們來考察使用什么方案,以其達到目標:將共用與個性的東西分開,而且盡可能共同,個性的東西盡可能使用配置方式。

    解決方案

    Ralasafe解決方案:
    1,登錄界面和登錄轉(zhuǎn)向后頁面,由開發(fā)人員編寫,這屬于個性化內(nèi)容,有CSS、頁面布局等;
    2,哪些頁面需要登錄才能查看,可以通過Filter來控制:哪些頁面需要控制,使用web.xml里面的url-pattern,是否登錄使用Filter驗證session;
    3,哪些頁面還需要進行角色權(quán)限驗證,這個我們拆分出去,做為功能權(quán)限驗證,以后再談;
    4,用戶名、密碼驗證可以共用:就是從request中讀取用戶名、密碼值,或許可能還要對密碼進行加密,然后與數(shù)據(jù)庫用戶表相關(guān)字段進行比對。
    5,登錄后頁面轉(zhuǎn)向:通過給session添加一個gotoPage屬性,驗證成功后轉(zhuǎn)向該頁面即可。

    實例說明

    OK,我們套個實例說話!就拿ralasafe-demo來說,下載地址:http://ralasafe.org/zh/download/download.jsp
    ralasafe/demo里面的頁面需要登錄后才能訪問,ralasafe/demo/login.jsp頁面是登錄頁面;ralasafe/demo/main.jsp是登錄后,顯示功能菜單的頁面。
     

    配置LoginFilter


    我們先將LoginFilter配置到web.xml文件:
     1 <filter> 
     2     <filter-name>ralasafe/LoginFilter</filter-name> 
     3     <filter-class>org.ralasafe.webFilter.LoginFilter</filter-class> 
     4     <init-param> 
     5         <param-name>loginPage</param-name> 
     6         <param-value>/ralasafe/demo/login.jsp</param-value> 
     7     </init-param> 
     8     <init-param> 
     9         <param-name>uniqueFieldsParams</param-name> 
    10         <param-value>loginName</param-value> 
    11     </init-param> 
    12     <init-param> 
    13         <param-name>passwordParam</param-name> 
    14         <param-value>password</param-value> 
    15     </init-param> 
    16     <!--init-param> 
    17         <param-name>encryptMethod</param-name> 
    18         <param-value>shahex</param-value> 
    19     </init-param--> 
    20 </filter> 

     
     這里有幾個屬性上面沒有提到。uniqueFieldsParams表示頁面的哪些字段可以唯一確定用戶,一般情況下只有一個參數(shù)。這里配置是loginName(Login頁面的字段input name屬性),那么login.jsp里面就有這樣的代碼:
    <input name="loginName" type="text" class="username"> 

    如果需要多個字段確定一個用戶,比如需要用戶名+機構(gòu)唯一確定,那么web.xml可以配置成:
    <init-param> 
        
    <param-name>uniqueFieldsParams</param-name> 
        
    <param-value>loginName,unitId</param-value> 
    </init-param> 

     passwordParam表示頁面哪個字段是密碼字段;encryptMethod表示密碼使用什么加密方法,ralasafe提供了base64,md5hex,shahex加密方法。你也可以自行開發(fā)加密方法,詳見LoginFilter javadoc
     

    哪些頁面需要登錄驗證

    我們只要將需要驗證的頁面,安裝該Filter即可。配置web.xml:
    <filter-mapping> 
        
    <filter-name>ralasafe/LoginFilter</filter-name> 
        
    <url-pattern>/ralasafe/demo/*</url-pattern> 
    </filter-mapping>

    表示ralasafe/demo下的所有URL資源都需要經(jīng)過LoginFilter過濾。

    驗證邏輯


    驗證邏輯全部在LoginFilter里面。LoginFilter主要做這些事情:
     
    1,首先判斷客戶端是否在請求登錄頁面,如果是,那么轉(zhuǎn)向登錄頁面,以免造成死循環(huán);
    2,然后如果是請求登錄,那么讀取用戶名、密碼(可能密碼還要加密)進行驗證;
    3,如果不是請求登錄,那么這時需要查看session用戶是否登錄了。如果沒有登錄,那么轉(zhuǎn)到登錄頁面;如果已經(jīng)登錄繼續(xù)doChain。
    細心的朋友會問,怎樣去后臺驗證用戶名密碼呢?
    Ralasafe是通過配置元數(shù)據(jù)(詳見這里),來告訴系統(tǒng)哪張表是用戶表,哪些字段是用戶唯一字段(和LoginFilter里里面的uniqueFieldsParams順序?qū)?yīng)上即可,無需名稱相同)。
    LoginFilter字段指明哪個字段是密碼字段,LoginFilter還需要指明和用戶表的哪個字段進行比較。也就是userPasswordField參數(shù)意義。詳見:LoginFilter javadoc

    登錄頁面轉(zhuǎn)向

    如果客戶端在沒有登錄的情況下,請求/ralasafe/demo/employMng路徑,那么登錄成功后,系統(tǒng)最好直接轉(zhuǎn)到該路徑。LoginFilter會將該路徑采集下來,以“gotoPage”屬性保存到session。登陸成功后,會移除掉該屬性(不占用session資源)。
    此時,LoginFilter的form action是這么編寫的:
    <% 
        
    String gotoPage = (String) session.getAttribute("gotoPage"); 
        
    if (StringUtil.isEmpty(gotoPage)) { 
            gotoPage 
    = "main.jsp"
        } 
     
    %> 
    <form name="" action="<%=gotoPage%>" method="post">
     
    至此,我相信一切你都明白了。
     
    ------------------------分隔線----------------------------
    畢竟我們搞ralasafe很多年了(04年開始的),所以很難更好地站在使用者角度(雖然,我們在努力,一直在努力),內(nèi)容肯定有欠缺和錯誤。歡迎大家提出寶貴建議,歡迎大家努力拍磚!
    我們也將繼續(xù)保持開源,為大家貢獻好的軟件。也懇請大家支持我們!
     
    注:下期講解 2, URL權(quán)限控制:哪些頁面訪問需要進行角色權(quán)限驗證,怎樣驗證最簡單有效,如何處理驗證失敗情況;
    ralasafe團隊博客在javaeye/baidu/blogjava等空間,同步發(fā)布。ralasafe官方網(wǎng)站:http://www.ralasafe.org/zh
     
    posted on 2010-09-01 19:41 細粒度權(quán)限管理 閱讀(3717) 評論(2)  編輯  收藏

    評論:
    # re: 權(quán)限管理最佳實踐:一,登錄控制[未登錄] 2010-09-06 09:32 | Neo
    關(guān)注中~~~  回復(fù)  更多評論
      
    # 讓他 2013-05-02 16:11 | 同一臺
    日月潭  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲av永久无码精品漫画| 亚洲天堂中文字幕在线| 亚洲黄色三级网站| 国产精品免费一区二区三区四区| 亚洲中文字幕成人在线| 一级毛片视频免费观看| 亚洲理论电影在线观看| 最新国产乱人伦偷精品免费网站 | 中文字幕亚洲精品资源网| 久久国产精品2020免费m3u8 | 亚洲一区精品无码| 你是我的城池营垒免费观看完整版| 亚洲国产V高清在线观看| 国产精品免费久久久久影院| 久久亚洲免费视频| 精品国产污污免费网站aⅴ| 亚洲一区二区三区高清在线观看| 暖暖免费高清日本中文| 九九免费精品视频在这里| 亚洲精品色午夜无码专区日韩| 无码人妻一区二区三区免费看| 亚洲视频在线观看网站| 岛国片在线免费观看| 深夜免费在线视频| 亚洲精品线在线观看| 拍拍拍又黄又爽无挡视频免费| 苍井空亚洲精品AA片在线播放| 亚洲综合色成在线播放| 免费无码中文字幕A级毛片| 中文字幕无码精品亚洲资源网久久| 国产成人高清精品免费鸭子| 99在线视频免费观看| 亚洲一区中文字幕| 亚洲国产精品成人一区| 未满十八18禁止免费无码网站 | 免费人成在线观看网站品爱网 | 亚洲日产无码中文字幕| 国产免费不卡视频| 午夜成人无码福利免费视频| 亚洲丁香色婷婷综合欲色啪| 免费黄色毛片视频|