【问题标题】:Would annotating a setter with @PreAuthorize be too brutal?用@PreAuthorize 注释setter 会不会太残忍?
【发布时间】:2013-02-25 02:56:35
【问题描述】:

我有一个可能被不同演员编辑的实体。该场景的一个很好的例子是系统用户,他可以编辑他们的个人数据(电话号码、电子邮件、密码),但不能修改,例如他们的权限或用户名,当然可以由超级用户完成。

那么,如果我只是用@PreAuthorize 注释setter 方法,会不会太残忍和丑陋?我能想到的唯一缺点是性能损失,但由于没有涉及我正在考虑的实体的批量操作,并且这些设置器永远不会经常被调用,所以现在看起来不再是一个问题。

【问题讨论】:

  • Bozho 给出了一个非常好的答案 - 是的,这没有必要。

标签: java spring spring-mvc spring-security


【解决方案1】:

我不建议这样做。首先,如果我看得很清楚,@PreAuthorize 需要一个类作为 bean。通常,实体不是 spring bean(除非您使用 @Configurable 魔法)。所以它只是行不通。

其次,@PreAuthorize 更好的地方是执行修改的业务方法。

【讨论】:

  • 你看起来是对的,而且经过一番思考,我知道我不会这样做。问题是,在我的例子中,业务方法只负责 CRUD 部分,请求参数与实体 (DTO) 属性的绑定发生在框架内(在我的例子中是 Spring MVC)。到目前为止,我未能成功设计一种方法来阻止框架绑定某些属性。
  • 这是一个有趣的问题。我想您可以尝试在 Binder 中进行一些自定义 - 绑定什么,不绑定什么,但这可能不是直截了当(我不知道是否有 binder-configuration-per-request)。
  • 这实际上非常简单——只有一个 @InitBinder 注释方法,其中默认的 PropertyEditor 被授权感知的替代。感谢您的提示!
猜你喜欢
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 2012-08-04
  • 2012-02-03
  • 2011-06-28
  • 1970-01-01
相关资源
最近更新 更多