Java 如果对象属于用户,则用户只能调用方法

Java 如果对象属于用户,则用户只能调用方法,java,jsf,acl,Java,Jsf,Acl,在CRUDJSF应用程序中,所有者有对象,比如记录 我希望所有者只能查看/编辑/删除自己创建的对象。实现这一点的一种方法是,在每个方法中检查对象是否已由登录的用户创建 可能有许多类似的方法和对象,因此我想使用另一种优雅/自动的方式,而不是使用 if (selectedObject.owner == loggedUser) 各种方法中的短语 是否可能,如果可能,如何实现?如果我是你,我将仅在用户获得授权的情况下,通过使用 rendered={user.isOwner} 您将在组件中使用此属性。

在CRUDJSF应用程序中,所有者有对象,比如记录

我希望所有者只能查看/编辑/删除自己创建的对象。实现这一点的一种方法是,在每个方法中检查对象是否已由登录的用户创建

可能有许多类似的方法和对象,因此我想使用另一种优雅/自动的方式,而不是使用

if (selectedObject.owner == loggedUser)
各种方法中的短语

是否可能,如果可能,如何实现?

如果我是你,我将仅在用户获得授权的情况下,通过使用

rendered={user.isOwner}
您将在组件中使用此属性。

您可以使用此属性进行访问保护

我将编写一个方面来拦截对访问受限方法的所有方法调用,在before通知中应用检查,如果失败则抛出异常。根据程序的结构,通过查找显式注释或使用相当通用的切入点

这会将您的
if(obj.owner.equals(loggedUser))
移动到一个中心位置,但当然您仍然需要注意不要在列表中包含其他用户的项目等


Java方面的实现是。Spring框架也在使用和支持它,您可能已经在使用它了:

我觉得这是一个优雅的解决方案。唯一可以添加的是一点抽象,但我现在不打算讨论这个问题。由于安全问题,我不想使用呈现属性。因为每个人都可以篡改发布的数据,更改并重新发布。这是一个安全漏洞。它不阻止方法被调用。