AOP下的权限控制实现

http://tech.ddvip.com   2006年11月21日    社区交流

本文详细介绍AOP下的权限控制实现

  权限控制的应用程序实现

  对于权限管理的做法,在WEB实现上,有以下几种:

  ⑴ 利用Filter,对所有进入的URI进行解析,并取得当时Session中的User信息,然后通过RBAC的机制,将此链接需要的权限与用户拥有的权限进行比较,然后进行相应的处理。这种做法有很多好处:简单,容易实现,并且对系统侵入性也不强。这里URL就是RBAC中的资源了。这样做的缺点是所有对数据的操作必须通过URL来体现,这一点在现代的程序中不太好实现。如果采用Struts, XWork或者Tapestry,采用同一个URL(浏览器看来)进行处理多项任务已不是什么稀奇的事。

  ⑵ 利用一个BaseServlet(Servlet+Jsp经典模式)或者BaseAction(Struts模式)或者BasePage(Tapestry模式)或者BaseController(SpringMVC模式),对所有的请求先进行过滤进行权限操作,然后再处理。稍微看一下就知道这种模式跟Filter并无本质不同。优缺点同上。

  那么,如果要实现更为细致的权限操作,精确到某个方法的权限,典型的做法如下:

public someFunciton() {
 //权限判断
 User user = context.getUser();
 if (user.canExecuteThisFunction()) {
  // do the business method
  // ...
 } else {
  throw new PermissionDeniedException();
 }
}

  这种做法能够将权限的粒度控制到具体的业务方法,因此它的控制能力应该是强大的。可以看到,权限判断部分对于每个方法几乎是独立的。

  这种在具体功能前加入权限操作检验的实现方式有很多缺点:

  ⑴ 每个功能类都需要相应的权限检验代码,将程序功能和权限检验混淆在一起,存在紧密的耦合性,扩展修改难度大。

来源:计算机与信息技术    作者:陈景燕 阳国贵    责编:豆豆技术应用

正在加载评论...