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

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

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

    當(dāng)柳上原的風(fēng)吹向天際的時候...

    真正的快樂來源于創(chuàng)造

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
    首先定義一個Annotation
    package com.heyang.anno;

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface PrivilegeFor{
        
    int value() default 0;
    }

    其次在接口IDocService中使用這個Annotation設(shè)定執(zhí)行方法所需要的權(quán)限值:
    package com.heyang.service;

    import com.heyang.anno.PrivilegeFor;
    import com.heyang.domain.Doc;
    import com.heyang.domain.User;

    /**
     * DocService需要實(shí)現(xiàn)的接口
     * 
    @author 何楊(heyang78@gmail.com)
     *
     * 
    @since 2008-12-30 下午05:16:17
     * 
    @version 1.00
     
    */

    public interface IDocService{
        
    /**
         * 用戶user添加一個文檔doc
         * 
    @param doc
         * 
    @param user
         
    */

        @PrivilegeFor(value
    =20)
        
    public void add(Doc doc,User user);
        
        
    /**
         * 用戶user刪除一個文檔doc
         * 
    @param doc
         * 
    @param user
         
    */

        @PrivilegeFor(
    60)
        
    public void delete(Doc doc,User user);
        
        
    /**
         * 用戶user更新一個文檔doc
         * 
    @param doc
         * 
    @param user
         
    */

        @PrivilegeFor(value
    =40)
        
    public void update(Doc doc,User user);
    }

    其三,在前置通知權(quán)限控制類中通過Annotation反射API得到方法需要的權(quán)限值,再根據(jù)用戶的權(quán)限值進(jìn)行權(quán)限判定,不滿足則拋出異常,這樣權(quán)限不足的用戶將無法訪問DocService的相應(yīng)方法。
    package com.heyang.service;

    import java.lang.reflect.Method;

    import org.springframework.aop.MethodBeforeAdvice;

    import com.heyang.anno.PrivilegeFor;
    import com.heyang.domain.User;
    import com.heyang.exception.PrivilegeNotEnoughException;

    /**
     * 實(shí)現(xiàn)權(quán)限子系統(tǒng)
     * 
    @author: 何楊(heyang78@gmail.com)
     * @date: 2009-1-2-下午04:19:13
     
    */

    public class PrivilegeService implements MethodBeforeAdvice{
        
    /**
         * 在IDocService的實(shí)際方法開始前進(jìn)行前置處理--權(quán)限檢查
         
    */

        
    public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
            
    // 取得方法名
            String mothodName=arg0.getName();
            
            
    // 取得方法的標(biāo)注
            PrivilegeFor privilegeFor=arg0.getAnnotation(PrivilegeFor.class);
            
            
    if(privilegeFor!=null){
                
    // 取得標(biāo)注的值(即執(zhí)行方法所需要的權(quán)限)
                int value=privilegeFor.value();
                
                
    // 取得用戶權(quán)限
                User user=(User)arg1[1];
                
    int userPrivilegeValue=user.getPrivilegePoint();
                
                
    // 權(quán)限判斷
                if(userPrivilegeValue<=value){
                    
    throw new PrivilegeNotEnoughException("用戶權(quán)限必須達(dá)到"+value+"才能執(zhí)行"+mothodName+"操作");
                }

            }

        }

    }


    最后的結(jié)果和XML設(shè)置的方案是一致的。
    示例執(zhí)行代碼如下:
        ApplicationContext ctx = new ClassPathXmlApplicationContext("context.xml");
            
            IDocService docService
    =(IDocService)ctx.getBean("docServiceProxy");
            
            Doc doc
    =new Doc("論美國次貸危機(jī)的產(chǎn)生及影響");
            User user
    =new User("中科院經(jīng)濟(jì)所研究員郭德綱",50);
            
            
    // 用戶向系統(tǒng)添加文章
            try{
                docService.add(doc, user);
            }

            
    catch(PrivilegeNotEnoughException ex){
                System.out.println(ex.getMessage());
            }

            
            
    // 用戶向系統(tǒng)更新文章
            try{
                doc.setName(
    "論美國次貸危機(jī)的產(chǎn)生及影響和我國應(yīng)該采取的應(yīng)對措施");
                docService.update(doc, user);
            }

            
    catch(PrivilegeNotEnoughException ex){
                System.out.println(ex.getMessage());
            }

            
            
    // 用戶從系統(tǒng)撒刪除文章
            try{
                docService.delete(doc, user);
            }

            
    catch(PrivilegeNotEnoughException ex){
                System.out.println(ex.getMessage());
            }

        }

    執(zhí)行效果
    將文件 名=論美國次貸危機(jī)的產(chǎn)生及影響交由dao處理(存入數(shù)據(jù)庫)
    將文件 名
    =論美國次貸危機(jī)的產(chǎn)生及影響和我國應(yīng)該采取的應(yīng)對措施交由dao處理(更新數(shù)據(jù)庫中對應(yīng)的記錄)
    用戶權(quán)限必須達(dá)到60才能執(zhí)行delete操作

    代碼下載
    http://www.tkk7.com/Files/heyang/PrivilegeAnnotation20090106155940.rar

    http://www.tkk7.com/Files/heyang/PrivilegeAnnotation220090108213912.rar

    需要自行載入的包為:
    commons-logging-1.0.4.jar,log4j-1.2.14.jar,spring.jar,mysql-connector-java-5.0.6-bin.jar
    posted on 2009-01-06 15:59 何楊 閱讀(476) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲成在人线aⅴ免费毛片| 13小箩利洗澡无码视频网站免费| 91精品国产免费久久国语蜜臀| 亚洲一区二区三区香蕉| 91视频免费网站| 亚洲精品成人片在线观看精品字幕| 无码人妻一区二区三区免费视频 | 久久久久亚洲AV无码网站| 女人隐私秘视频黄www免费| 亚洲色精品aⅴ一区区三区 | 在线观看的免费网站无遮挡 | 久久亚洲AV午夜福利精品一区 | 中文字幕在线视频免费观看 | 日本午夜免费福利视频| 亚洲av无码片vr一区二区三区| 国产小视频在线免费| 一级女性全黄久久生活片免费| 国产精一品亚洲二区在线播放| 久别的草原电视剧免费观看| 亚洲视频小说图片| 99re在线视频免费观看| 久久久久亚洲AV无码专区体验 | 亚洲成A人片在线观看无码3D| 成人免费视频一区二区| 亚洲国产精品VA在线观看麻豆| 久久国产高潮流白浆免费观看| 亚洲一区二区三区成人网站| 国产在线a不卡免费视频| 中文字幕免费观看全部电影| 亚洲综合久久1区2区3区| 国产裸模视频免费区无码| www一区二区www免费| 亚洲成人一级电影| 四虎国产精品免费久久影院| 免费精品久久天干天干| 亚洲av一本岛在线播放| 亚洲精品在线视频| 91久久成人免费| 亚洲阿v天堂在线2017免费| 91亚洲国产成人久久精品 | 亚洲国产成人高清在线观看|