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

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

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

    ?? ??? 針對合法的登陸,(一)和(二)的解決方案,已經(jīng)解決了用戶針對模塊和功能點的權(quán)限控制問題。但是如果用戶如果在地址欄手動寫入以前已經(jīng)識記的URL地址,那么用戶就可以獲取他所沒有

    的權(quán)限而進行相關(guān)的操作。為了解決這個問題,提出了以下方案:

    ?????? 把系統(tǒng)中的某一模塊下所有鏈接地址全部錄入數(shù)據(jù)庫,然后根據(jù)請求地址和數(shù)據(jù)庫已記錄的地址進行對比,以此進行控制權(quán)限的判斷。
    ???????
    ?????一:把鏈接地址存入數(shù)據(jù)庫

    ?????? 把系統(tǒng)中用到的地址存入PAGE_OPERATION_TABLE,其中PAGE_ID為某一系統(tǒng)功能點的入口PAGE,OPERATION_IS_VALID判斷是否需要進行權(quán)限判斷。

    ??? 二:對系統(tǒng)的ACTION進行攔截。

    ??? *Action如果繼承自DispatchAction,則重寫*Action的execute()方法。
    ???
    @Override
    ????
    public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,
    ????????????HttpServletRequest?request,?HttpServletResponse?response)
    ????????????
    throws?Exception?{
    ????????
    return?super.execute(mapping,?form,?request,?response);
    ????}


    ????? 配置攔截器:

    ?????
    ????<bean?id="myInterceptor"
    ????????
    class="net.better_best.www.utils.AopPriviledge">
    ????
    </bean>

    ????
    <aop:config>
    ????????
    <aop:aspect?id="aop"?ref="myInterceptor">
    ????????????
    <aop:pointcut
    ????????????????expression
    ="execution?(?org.apache.struts.action.ActionForward?net.better_best.www.*.action.*.*(..))"
    ????????????????id
    ="mycut"?/>
    ????????????
    <aop:around?pointcut-ref="mycut"?method="doBasicProfiling"?/>
    ????????
    </aop:aspect>
    ????
    </aop:config>

    ???? 實現(xiàn)攔截方法:

    ???
    package?net.better_best.www.utils;

    import?java.util.Collection;
    import?java.util.Date;
    import?java.util.List;

    import?javax.servlet.http.HttpServletRequest;

    import?org.apache.struts.action.ActionMapping;
    import?org.aspectj.lang.ProceedingJoinPoint;

    public?class?AopPriviledge?{

    ????@SuppressWarnings(
    "unchecked")
    ????
    /*
    ?????*?aop攔截,環(huán)繞通知,實現(xiàn)權(quán)限攔截;?String?name:根據(jù)name判斷管理員或會員;n代表管理員,m代表會員,n或m的值代表特定的操作;
    ?????
    */

    ????
    public?Object?doBasicProfiling(ProceedingJoinPoint?pjp)?throws?Throwable?{
    ????????Object[]?obj?
    =?pjp.getArgs();
    ????????ActionMapping?mapping?
    =?(ActionMapping)?obj[0];
    ????????HttpServletRequest?request?
    =?(HttpServletRequest)?obj[2];
    ????????String?mappingName?
    =?"";
    ????????
    if?(SessionUtil.getSessionManager(request)?!=?null?&&?request.getParameter("n")!=null)?{
    ????????????mappingName?
    =?"error_manager";
    ????????????String?requestPath?
    =?mapping.getPath()+?".do?"+?request.getQueryString().substring(0,request.getQueryString().indexOf("&"));
    ????????????List?priviledgeList?
    =?(List)?request.getSession().getAttribute("managerPriviledge");
    ????????????
    if?(priviledgeList.contains(requestPath.trim()))?{
    ????????????????
    return?priviledge(pjp,?request);
    ????????????}
    ?else?{
    ????????????????
    return?mapping.findForward(mappingName);
    ????????????}


    ????????}
    ?else?if?(SessionUtil.getSessionUser(request)?!=?null?&&?request.getParameter("m")!=null)?{
    ????????????mappingName?
    =?"error_user";
    ????????????Collection?userPriviledge?
    =?(Collection)?request.getSession().getAttribute("userPriviledge");
    ????????????
    if?(userPriviledge.contains(mapping.getPath().trim()))?{
    ????????????????
    return?priviledge(pjp,?request);
    ????????????}
    ?else?{
    ????????????????
    return?mapping.findForward(mappingName);
    ????????????}

    ????????}
    ?else?if?(SessionUtil.getSessionUser(request)?==?null?&&?request.getParameter("m")!=null)?{
    ????????????
    return?mapping.findForward("userindex");
    ????????}
    ?else?if?(SessionUtil.getSessionManager(request)?==?null&&?request.getParameter("n")!=null)?{
    ????????????
    return?mapping.findForward("index");
    ????????}
    ?else
    ????????????
    return?mapping.findForward("priviledge_error");

    ????}


    ????
    /*
    ?????*?實現(xiàn)真正的權(quán)限攔截;?String?value?:某一個權(quán)限值,為pageId;?List<PageTable>?module:
    ?????*?PageTable的集合,為某一用戶的某一模塊所具有的頁面功能集;?String?mappingName:代表頁面URL,程序異常跳轉(zhuǎn)之;
    ?????
    */

    ????
    private?Object?priviledge(ProceedingJoinPoint?pjp,
    ????????????HttpServletRequest?request)?
    throws?Throwable?{
    ????????Object?result?
    =?null;
    ????????
    long?begintime?=?new?Date().getTime();
    ????????result?
    =?pjp.proceed();
    ????????
    long?endtime?=?new?Date().getTime();
    ????????
    long?time?=?endtime?-?begintime;
    ????????System.out.println(
    "====================================================================================================================");
    ????????System.out.println(pjp.getTarget().getClass().getSimpleName()?
    +?"?????"+?request.getQueryString()?+?"??????耗時??????????"?+?time+?"??????????ms");
    ????????System.out.println(
    "====================================================================================================================");
    ????????
    return?result;
    ????}


    }



    緩存權(quán)限:

    ??List?priviledgeList?=?pageService.getPriviledgeForManager(""+manager.getManagerNroleId());
    ???????????request.getSession().setAttribute(
    "managerPriviledge",?priviledgeList);


    以上步驟是針對URL寫入的權(quán)限控制的解決方案進行了大致的記錄。

    Feedback

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制  回復(fù)  更多評論   

    2010-06-17 15:58 by dragon904
    有沒有實現(xiàn)數(shù)據(jù)權(quán)限?不同的用戶可以訪問不同的數(shù)據(jù)。

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制  回復(fù)  更多評論   

    2010-06-17 16:07 by java小爬蟲
    @dragon904
    不太明白,
    你的意思是不是信息類型,信息發(fā)布人類型,以及發(fā)布人等概念,這個在在信息表里面可以定義字段,然后在SQL中加入條件可以查詢啊。

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制  回復(fù)  更多評論   

    2010-06-17 16:15 by 獨孤行
    我們現(xiàn)在的項目就是用這個方法做權(quán)限管理。。。

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制  回復(fù)  更多評論   

    2010-06-17 16:27 by Lancelot
    你發(fā)的這三個東西實在太粗糙了,一些基礎(chǔ)功能都沒有考慮到(比如多場景多角色),基本上沒有什么可取的地方。
    這么說可能有點兒打擊你,但事實就是如此。
    建議你去好好看看acegi(spring-security)的實現(xiàn)方式;如果非要自己實現(xiàn)的話,也可以考慮用位運算的方式來進行匹配,也會比字符串匹配的效率要高不少。

    另外@dragon904
    你提出的問題不是訪問權(quán)限需要去考慮的問題,是需要通過數(shù)據(jù)范圍去約束的,請不要混為一談。

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制  回復(fù)  更多評論   

    2010-06-17 18:00 by 53中文網(wǎng)
    沒怎么看明白

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制  回復(fù)  更多評論   

    2010-06-23 14:16 by IT者
    可讀性太差,說實話,如果你這種做法用到項目中,以后你就天天等著哭吧。

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制[未登錄]  回復(fù)  更多評論   

    2010-06-23 23:22 by bobby
    @Lancelot
    能不能詳細(xì)介紹一下用位運算的方式如何匹配,謝謝!

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制  回復(fù)  更多評論   

    2010-06-24 08:54 by java小爬蟲
    @IT者

    這位兄弟,有什么問題說清楚一點啊,

    我最討厭夸夸其談的人了。

    # re: 用戶權(quán)限的解決方案(三)----------URL寫入的權(quán)限控制  回復(fù)  更多評論   

    2010-07-02 09:16 by 威爾
    我強烈建議你去學(xué)習(xí)巴巴運動網(wǎng)視頻

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品亚洲w码日韩中文| 亚洲国产一区在线| 高清永久免费观看| 亚洲精品国产成人99久久| 国产麻豆视频免费观看| 在线观看亚洲免费| 亚洲AV无码乱码在线观看富二代 | 国产精品亚洲片在线花蝴蝶| 亚洲一区精品伊人久久伊人| 亚欧免费一级毛片| 亚洲av乱码一区二区三区按摩| 亚洲精品无码mv在线观看网站| 青娱乐免费在线视频| 一区二区视频免费观看| 亚洲无圣光一区二区| 亚洲日韩在线中文字幕第一页| 最近中文字幕大全中文字幕免费| 激情婷婷成人亚洲综合| 久久精品蜜芽亚洲国产AV| 免费一级特黄特色大片在线| 精品国产sm捆绑最大网免费站| 一个人看www免费高清字幕| 亚洲AV无码一区二区三区人| 亚洲国产成人精品无码区在线观看 | 亚洲精品福利你懂| 亚洲成a人片在线观看日本| 国产高清免费观看| 黄页网站在线看免费| 国产一精品一AV一免费| 免费播放国产性色生活片| 亚洲首页国产精品丝袜| 亚洲成人精品久久| 亚洲中文字幕久久精品无码APP| 午夜一级免费视频| 精品香蕉在线观看免费| 两个人看www免费视频| 黄页网址大全免费观看12网站| 狠狠色伊人亚洲综合网站色| 亚洲精品无码不卡| 亚洲国产第一站精品蜜芽| 亚洲国产精品嫩草影院久久 |