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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值