前面谈的AOP是将来我的打算,目前我是使用J2EE容器的安全权限来实现这种分离的。
参考J2EE 1.3标准.J2EE容器的安全权限是通过JAAS实现,同时基于RBAC,也就是说,在J2EE所有配置中,都是基于角色和权限这个概念,
下面是我的EJB的权限配置,
<method-permission>
<role-name>User</role-name>
<method>
<ejb-name>MyEJB</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<method-permission>
<role-name>User</role-name>
<method>
<ejb-name>MyEJB2</ejb-name>
<method-name>createUser</method-name>
</method>
</method-permission>
User是一个角色名称,我现在授予User对于MyEJB所有方法都拥有访问权限,当然可以限定某个方法名称,例如第二个例子是设定User对于MyEJB2的createUser方法拥有访问权限。
这段配置相当于在代码中使用 if 权限判断,这样你的代码就实现了模块和权限的分离。当然AOP也是类似方式。
在实际情况中,EJB权限很少用,除非你提供Web Services,一般我设定Web层容器权限就可以。
具体情况在我的“Java实用系统开发指南”中有些介绍。