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