技术开发 频道

AOP与权限控制实现

  AOP下的应用程序权限控制实现

  引入AOP概念后的权限实现已经不是前面Jive实例那样“落后”,我们对这个实例进行重整(Refactorying)如下:

  创建一个Aspect,专门用于权限检查,如下:

private static aspect PermissionCheckAspect {   private pointcut permissionCheckedExecution() :    execution ( public Forum ForumFactory. createForum(String , String ));   before () : permissionCheckedExecution() {     if !(permissions.get(ForumPermissions.SYSTEM_ADMIN)) {       throw new UnauthorizedException();     }    } }

  该段代码功能是:当系统运行ForumFactory.createForum方法之前,将首先检查是否有权限操作。

  代码中pointcut触发的条件是createForum方法执行,如果有其它需要系统管理员身份才能执行的方法加入,将写成如下代码:

private pointcut permissionCheckedExecution() :    execution ( public Forum ForumFactory. createForum(String , String )) ||    execution ( public Forum ForumFactory. deleteForum(String , String )) ||    ......    execution ( public Forum ForumFactory. deleteThread(String , String ));
  这些方法陈列比较琐碎,依据AspectJ语法,可以简化如下:
private pointcut permissionCheckedExecution() :    execution ( public * ForumFactory .*(..));
  有兴趣者可以将Jive论坛中相关权限Proxy部分使用AOP重整,另外,由于Jive没有引入角色概念,导致权限和用户HardCode在编码中,如何实现权限和用户解耦,最小限度的降低HardCode量,角色概念在其中起着不可忽视的重要作用。
0
相关文章