【问题标题】:Java EE 6 authorization: restrict to ownerJava EE 6 授权:限制为所有者
【发布时间】:2012-07-05 06:13:12
【问题描述】:

假设我有一个简单的模型,比如“记录”:

@Model
public class Record {
  private Principal owner; // presume getter/setters as well
}

然后我想要一个简单的 EJB 来控制创建和删除记录。为了争论,我们只担心删除:

@EJB
@Named
@Stateless
public class RecordMgr {
  @PersistenceContext private EntityManager em;

  public void delete(Record r) {
    em.remove(r);
  }
}

我想限制管理员和所有者对RecordMgr#delete(Record r) 的访问:换句话说,管理员和创建对象的人,只有他们可以删除它。我不知道如何通过声明性安全性来完成这两项工作。解决这个问题的正确方法是什么?

【问题讨论】:

    标签: security java-ee-6


    【解决方案1】:

    您不能使用声明式安全性来做到这一点,因为在@RolesAllowed 中的角色和创建实体的用户之间无法建立联系。

    唯一的方法是编程安全并检查用户是 bean 的创建者还是管理员,或两者兼而有之。

    您可以利用声明性安全性的唯一部分是列出大声创建此类记录的角色和管理员角色。之后,必须以编程方式进一步检查当前用户的角色是管理员还是当前用户创建的记录。在任何情况下,声明式安全的整个逻辑都会被复制到程序安全中。

    【讨论】:

    • 抛出 SecurityException 是否是以编程方式实现的正确方法?
    猜你喜欢
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 2013-04-30
    • 2019-02-27
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多