打字猴:1.700446805e+09
1700446805
1700446806 //权限级别
1700446807
1700446808 Reader, Author, Admin;
1700446809
1700446810 //实现鉴权
1700446811
1700446812 public boolean identify(){
1700446813
1700446814 return false;
1700446815
1700446816 }
1700446817
1700446818 }
1700446819
1700446820 定义了一个通用鉴权者,使用的是枚举类型,并且实现了鉴权者接口。现在就剩下资源定义了,这很容易定义,资源就是我们写的类、方法等,之后再通过配置来决定哪些类、方法允许什么级别的访问,这里的问题是:怎么把资源和权限级别关联起来呢?使用XML配置文件?是个方法,但对我们的示例程序来说显得太繁重了,如果使用注解会更简洁些,不过这需要我们首先定义出权限级别的注解,代码如下:
1700446821
1700446822 @Retention(RetentionPolicy.RUNTIME)
1700446823
1700446824 @Target(ElementType.TYPE)
1700446825
1700446826 @interface Access{
1700446827
1700446828 //什么级别可以访问,默认是管理员
1700446829
1700446830 CommonIdentifier level()default CommonIdentifier.Admin;
1700446831
1700446832 }
1700446833
1700446834 该注解是标注在类上面的,并且会保留到运行期。我们定义一个资源类,代码如下:
1700446835
1700446836 @Access(level=CommonIdentifier.Author)
1700446837
1700446838 class Foo{
1700446839
1700446840 }
1700446841
1700446842 Foo类只能是作者级别的人访问。场景都定义完毕了,那我们看看如何模拟ACL的实现,代码如下:
1700446843
1700446844 public static void main(String[]args){
1700446845
1700446846 //初始化商业逻辑
1700446847
1700446848 Foo b=new Foo();
1700446849
1700446850 //获取注解
1700446851
1700446852 Access access=b.getClass().getAnnotation(Access.class);
1700446853
1700446854 //没有Access注解或者鉴权失败
[ 上一页 ]  [ :1.700446805e+09 ]  [ 下一页 ]