基于组件方法级别授权访问

授权访问(ACL)一般有以下几种:

1. Web资源,主要是以Web URL为特征,对Web资源的Jsp/Servlet 图片等目录下全部资源实现授权访问。

2. 组件资源,同一个组件的不同方法实现对资源进行不同性质的操作,每种操作方法都需要实现授权访问,例如:A角色可以实现帖子创建,但不能实现帖子删除。

3. 数据资源,保存在数据库中的某些数据只能让特定角色一些访问。比如某个帖子只能让积分超过多少的用户访问。

本文谈论了使用基于Web容器的和Jdon框架拦截器轻松实现前面两种方式。
http://www.jdon.com/jdonframework/acl.htm

是阿。偶最近刚换了工作。
请教一下,我以前曾尝试过在spring aop里获取session context或则request context,但没有找到相关方法。看了jdon代码里aop实现是可以获取到session context的,
ProxyMethodInvocation proxyMethodInvocation = (ProxyMethodInvocation) invocation;
TargetMetaRequest targetMetaRequest = proxyMethodInvocation.getTargetMetaRequest();
SessionContext sessionContext = targetMetaRequest.getSessionContext();

能大概说一下实现原理吗。我以前的 case是 打算在 业务层以aop方式实现 操作的 log功能 ,但由于 不能在business layer获取 到 session context,就是取不到 user信息 ,所以 放弃 这种方式 。架构 是 spring+struts,所以不能在 struts里采用 spring aop.

哈哈,Spring是没有此功能的,无法在业务层透明访问Session Context,你自己做,不过有个变通方法,需要花费一些力气:可以先把User放在ThreadLocal中,然后在Spring容器中获取。

thanks

我不太喜欢把和业务逻辑相关的东西放到filter中来,filter是个全局的东西,这会增加系统调试的难道,很容易造成混乱。就好像我们编程时尽量不要用全局变量一样。 用户权限判断,我是用定义一些role的接口,然后用户都来实现这些接口。比如像admin这样的role的接口中定义了删除帖子的方法。

>我不太喜欢把和业务逻辑相关的东西放到filter中来
是的,业务层也可以使用filter的,所以没有必要将业务逻辑放到表现层的filter,但是有一个概念,权限用户方面有一半可以说不属于业务逻辑,JavaEE/J2EE标准已经把它写入规范,可以由框架或服务器实现,可以参见JiveJdon3源码,一部分权限如组件授权访问属于通用框架,推给服务器实现,而在MessageShell这样业务层中,实现了和具体对象数据有关的权限,分两部分。