AspectJ 簡單的權限管理

我這邊自己嘗試的寫了一個簡單的權限管理

是用AspectJ 來實現的

非常的方便 要不spring 原裝的aop方便的多  

在aspectJ的配置方面我就不都說了 在我的博文裏有介紹

先介紹下我這個demo  背景是物業權限管理 

實現的原理是通過註解來實現的    

包的分佈是這樣的


我們首先需要自定義自己的註解來 和自己對應的相關value值代表什麼的編碼表(這個需要自己根據業務來實現)

package com;

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

/**
 * Created by m1867 on 2016/10/28.
 */
@Target(ElementType.METHOD)//這個註解是應用在方法上
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthCheck {
    /**
     * 權限值
     * @return
     */
    String value() default "";
}

這個就是註解  注意我們需要在我們自定義的註解上 定義它的相關信息

尤其是這個  

@Retention(RetentionPolicy.RUNTIME)
表示jvm運行時,此註解可被讀

這樣我們才能通過反射來實現解讀這個註解

之後是定義我們的 .aj 也就是 aspect 文件

package com;

import org.aspectj.lang.reflect.MethodSignature;

import java.lang.reflect.Method;

/**
 * Created by m1867 on 2016/10/28.
 */
public aspect SampleAspect {
    /**切入點  攔截所有的有@AuthCeck註解的方法*/
    public pointcut serviceAuthCheckAnnotatedMethods(): @annotation(AuthCheck);

    /**
     *這個切入點的代理類  我們可以輸出我們想要的 或者是直接拋出異常也是可以的
     * */
    before(): serviceAuthCheckAnnotatedMethods(){
        System.out.println(YjtxCtrl.XQADMIN);
        MethodSignature methodSignature = (MethodSignature) thisJoinPoint.getSignature();
        Method method = methodSignature.getMethod();

        if (method.isAnnotationPresent(AuthCheck.class)) {
            //得到方法上的註解
            AuthCheck authCheck = method.getAnnotation(AuthCheck.class);
            String methodAccess = authCheck.value();
            System.out.println(methodAccess);
            if("YG".equals(methodAccess)){
                System.out.println("YG");
                throw
            }else if("XQADMIN".equals(methodAccess)){
                System.out.println("XQADMIN");

            }else if("WYADMIN".equals(methodAccess)){
                System.out.println("WYADMIN");

            }else if("PTADMIN".equals(methodAccess)){
                System.out.println("PTADMIN");

            }else{
                throw new IllegalStateException("權限不足");
                System.out.println("wu");
            }
        }
        throw new IllegalStateException("權限不足");
        System.out.println("沒有找到");
    }


}

合格.aj文件是AspectJ 文件 你可以把這個.aj文件看成是我們原先在Spring AOP 中的代理類和在xml配置切點的結合

非常的方便

這連個寫好之後就可以寫我們的controller 和test

package com;

/**
 * Created by m1867 on 2016/10/28.
 */
public class YjtxCtrl {
    public static final int XQADMIN=5;

    public int add(int x, int y) {
        return x + y;
    }

    @AuthCheck(value = "XQADMIN")
    public String getPassword(String username) {
        return "password";
    }

}

test

package com;

import org.junit.Test;

/**
 * Created by m1867 on 2016/10/28.
 */
public class test {
    @Test
    public void test(){
        YjtxCtrl yjtxCtrl = new YjtxCtrl();
        /*yjtxCtrl.add(5,6);*/
       System.out.println(yjtxCtrl.getPassword("6666"));



    }
}

ok demo就全部在這裏了 希望可以能幫助大家

這個我也是感慨是學兩天 具體有什麼不足的地方也希望能幫忙指出來

最後

感謝網絡上的大牛和前輩的幫助 及分享的知識 謝謝










@Retention(RetentionPolicy.RUNTIME)
發佈了48 篇原創文章 · 獲贊 39 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章