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

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

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

    隨筆-54  評論-0  文章-2  trackbacks-0
    巴巴運(yùn)動(dòng)網(wǎng)的權(quán)限模塊總結(jié)
      因?yàn)榘桶瓦\(yùn)動(dòng)網(wǎng)的權(quán)限設(shè)計(jì)模塊對我來說,可以實(shí)現(xiàn),打算好好整理一下思路,面試時(shí)說不定還能起點(diǎn)作用,看了兩遍,自己總結(jié)下:
    權(quán)限定義/權(quán)限組(角色)模塊
    1.對系統(tǒng)的所有功能定義相應(yīng)的權(quán)限
    2.由網(wǎng)管針對不同部門不同員工分配權(quán)限組(角色),在分配角色時(shí),
      可以選擇該角色具有的權(quán)限
    3.權(quán)限攔截模塊
     
    具體步驟:
     1.設(shè)計(jì)權(quán)限實(shí)體
        聯(lián)合主鍵(SystemPrivilegePK),該類有module和privilage兩個(gè)屬性
     2.初始化權(quán)限
     3.設(shè)計(jì)權(quán)限組(角色)PrivilegeGroup實(shí)體,如果我們希望通過修改權(quán)限組添加或刪除權(quán)限,那么權(quán)限和角色之間的多對多關(guān)系的維護(hù)端由角色來維護(hù)
        private String groupid;
        private String name;
        private Set<SystemPrivilege> privileges = new HashSet<SystemPrivilege>();
    同時(shí)加上到數(shù)據(jù)庫表的映射
    當(dāng)然由于權(quán)限和角色之間的多對多關(guān)系是雙向關(guān)聯(lián),所以要在SystemPrivilege實(shí)體bean中加上和PrivilegeGroup實(shí)體Bean之間的映射

    4.實(shí)現(xiàn)權(quán)限組的添刪改
    路徑:/control/
     新建接口PrivilegeGroupService,繼承Dao<PrivilegeGroupService>,
     新建PrivilegeGroupService,繼承DaoSupport
    當(dāng)然這些Bean都需要交給Spring管理,加上相應(yīng)的注解即可
    5.實(shí)現(xiàn)權(quán)限組的分頁,這個(gè)簡單
    6.實(shí)現(xiàn)添加權(quán)限,分頁列表上的Action,新建Action,名稱為PrivilegeGroupManageAction,
      ①.第一個(gè)方法是AddUI,主要是顯示頁面
      接下來就是增刪該操作了(...)

    7.權(quán)限做完后要新建一個(gè)Action用于完成SystemPrivilege,權(quán)限組,超級管理員的初始化,初始化完成后點(diǎn)擊“確定”,進(jìn)入登陸頁面


     權(quán)限模塊的核心:                        權(quán)限攔截模塊

    1.員工要訪問control開頭的路徑,必須登陸,即粗粒度的權(quán)限攔截,這是通過Fileter實(shí)現(xiàn)的,這里我們定義為PrivilegeFilter,先從session范圍中得到employee對象,如果對象為空,就瀏覽器重定向到登陸界面,,如果登陸了,就chain.doFilter(request,response);之后在web.xml配置,這樣就實(shí)現(xiàn)粗粒度的權(quán)限控制了3
    2.對于界面上的某些功能,不是每一個(gè)登陸到系統(tǒng)的員工對頁面的功能都有操作權(quán)限,這就是細(xì)粒度的權(quán)限攔截
    關(guān)鍵是怎樣細(xì)粒度的權(quán)限控制
    怎樣實(shí)現(xiàn)細(xì)粒度的權(quán)限控制?
    每點(diǎn)擊頁面上的按鈕,都會(huì)提交給相應(yīng)的Action處理,細(xì)粒度的權(quán)限攔截就是對Action攔截,在不修改原代碼情況下,增加攔截代碼,使用的是AOP技術(shù)
     每一個(gè)功能Action都有相應(yīng)的方法處理,我們用JDK5中的注解為Action中的方法注解相應(yīng)的權(quán)限,因?yàn)槲覀冇袝r(shí)會(huì)修改方法名稱,用注解維護(hù)起來比較方便比如:
    @Permission(module="order",privilege="modify")
    public ActionForward OrderModify(){}
     
    實(shí)現(xiàn)過程:
    ①.新建注解Permission,
               @Retention(PetentionPolicy.RUNTIME)
               @Target(ElementType.METHOD)
                 public @interface Permission{
                     String module();
                      String privilege();
                 }
          為Action中的方法,加上注解
        只有攔截到Action中的這個(gè)方法,才能實(shí)現(xiàn)權(quán)限攔截,現(xiàn)在我們的Action已經(jīng)交給Spring管理,所以我們可以使用Spring的AOP技術(shù)進(jìn)行權(quán)限攔截,有必要復(fù)習(xí)一下AOP的知識(shí):
     在Action類上加一個(gè)注解如下:@Aspect,當(dāng)然要使這個(gè)注解起作用,我們必須在Spring的配置文件里配置:
      <aop:aspectj-autoproxy> <!--注解解析器-->
    要實(shí)現(xiàn)切面編程,抽象過程體現(xiàn)在代碼上, 就是一個(gè)采用類來描述,要是這個(gè)類起作用,我們必須要把它交給Spring管理,很郁悶
    @Aspect@Component
    public class Interceptor{
     @Pointcut("exception(org.apache.struts.action.ActionForward  cn.itcast.web.action.. * *(org.apache.struts.actionMapping,...))")
     private void actionMethod(){}
    @Around("actionMethod")
    public Object interceptor(ProceedingJoinPoint pjp) throw Throwable{
      System.out.println("攔截到了"+pjp.getSignature().getName()+"方法");
      return pjp.proceed();
     }

    注意:
    通知:
    前置通知,在攔截的方法前加通知,這個(gè)通知執(zhí)行后,被攔截的方法仍然會(huì)執(zhí)行。
    所以使用環(huán)繞通知,但是這樣的攔截只能是攔截Action實(shí)現(xiàn)的,他不能攔截繼承自DispatchAction
    原因:Spring的動(dòng)態(tài)代理技術(shù)的問題
    Spring不能對通過反射調(diào)用的方法應(yīng)用上通知(Advice)
    當(dāng)Spring發(fā)現(xiàn)我們的繼承的DispatchAction的那個(gè)類符合他攔截的要求,就會(huì)生成一個(gè)代理對象,因?yàn)闊o接口,默認(rèn)使用cglib為這個(gè)Action生成代理對象,根據(jù)cglib生成代理對象的特點(diǎn),繼承目標(biāo)類,并且重寫所有非final的方法來實(shí)現(xiàn)
     
    注:spring只會(huì)為本類定義的方法應(yīng)用通知



    posted on 2010-04-01 07:10 d66380022 閱讀(609) 評論(0)  編輯  收藏
    主站蜘蛛池模板: 亚洲人成国产精品无码| 国产高清免费的视频| 亚洲国产精彩中文乱码AV| 手机永久免费的AV在线电影网| 在线观看人成网站深夜免费| 亚洲综合在线一区二区三区| 国产一卡2卡3卡4卡2021免费观看| 亚洲精品自拍视频| 在线免费观看国产| 亚洲人成人77777在线播放| 91免费国产自产地址入| 亚洲无线电影官网| 久久九九兔免费精品6| 亚洲一区二区三区无码国产| 亚洲成a人无码亚洲成av无码| 在线a人片天堂免费观看高清| 亚洲AV无码成人网站在线观看 | 国产午夜无码精品免费看| 亚洲日韩欧洲无码av夜夜摸| 丝瓜app免费下载网址进入ios | 亚洲一区二区免费视频| 国产成人精品日本亚洲18图| 免费看美女让人桶尿口| 免费无码专区毛片高潮喷水| 国产亚洲福利精品一区| 3344免费播放观看视频| 日本亚洲免费无线码 | 亚洲精品无码少妇30P| 免费成人av电影| 日韩免费电影网站| 亚洲一区二区免费视频| 国产精品国产免费无码专区不卡 | 国产v片免费播放| 91视频免费观看高清观看完整| 亚洲色图在线观看| 日本免费网站观看| 久久精品私人影院免费看| 亚洲最大无码中文字幕| 亚洲乱码精品久久久久..| 久久精品a一国产成人免费网站 | 97在线观看永久免费视频|