我这边自己尝试的写了一个简单的权限管理
是用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)