是否有任何类(免费,开源或商业)执行类似于Java AccessController的访问控制?我想创建一组可在运行时更改的动态策略。
但是,我想避免编码
if Allowed( ... ) then
到处都是。我知道我可能需要调整我的程序类层次结构,但我更喜欢它而不是手动添加整个地方的警卫。
如果没有现成的代码,那么什么是合理的方法? RTTI?
修改:以下是Security Annotations and Authorization in GlassFish and the Java EE 5 SDK文章中的示例。由于有人在评论中提到了注释,我认为这是理想的:
@Stateless
@RolesAllowed("javaee")
public class HelloEJB implements Hello {
@PermitAll
public String hello(String msg) {
return "Hello, " + msg;
}
public String bye(String msg) {
return "Bye, " + msg;
}
}
来自文章:
在此示例中,每个人都可以访问hello()方法,角色javaee的用户可以访问bye()方法。
修改 好吧,似乎普遍的共识是,这不能在Delphi中完成。其他人认为这是一个糟糕的方法。
我,我仍然认为这会很棒。我在Java中使用Annotations的经验(作为图腾柱中的代码猴子)是积极的。您添加了一个新方法,添加了某种形式的注释(与Java安全注释不完全相同),您就完成了。管理员稍后可以转到管理面板,并将该新处理程序的授予访问权限添加到组或单个用户。它只是有效。
这些是我目前的选择:
OnExecute
方法;我假装使用TAction.Name
属性作为权限名称(“handler”),从表中读取允许的操作列表。我可以使用动作管理器中的动作列表在管理界面中显示整个列表。答案 0 :(得分:2)
Delphi还没有这样的框架,也没有类似EJB的概念。 DELPHI确实支持类注释,并且可以设计这样的框架,可能与TAction一起提供动作级别的安全性,但我怀疑这可以扩展到阻止特定的方法调用。 Delphi代码永远不会要求权限来调用虚方法。任何在Delphi中注入每个虚拟方法调用的东西,在幕后添加一个checkPermission调用(在我看来)都是邪恶的。这将是缓慢的,而且比手工编写这样的检查更糟糕。
但是,将来可能会使用与Mock delphi类相同的技术来创建一些自动安全包装器对象。
我猜测如果所讨论的Java库使用Aspects(实质上是通过代码挂钩等技术实现“注入”)那么它就不需要在任何地方进行“CheckAllowed”调用。如果您不介意将所有方法调用更改为实现接口,然后提供执行方法调用的包装器,并使用某种自动生成的模拟安全包装器,则可以避免调用CheckAllowed。
这是一个守卫的No,具有“未来可能的有限框架”条款。
答案 1 :(得分:1)
是的,有一个Delphi Access Control Library (lkacl)(OpenSource),JCL(OpenSource)提供了一个非常全面的安全性features,最后如果你的需求真的很高,最受欢迎商业解决方案是TMS Security System。