使用自定义 spring 安全注解
Posted
技术标签:
【中文标题】使用自定义 spring 安全注解【英文标题】:Using custom spring security annotations 【发布时间】:2013-05-24 23:36:35 【问题描述】:我正在尝试使用 @PreAuthorize 和 @Secured 之类的 springs 安全注释,但我希望评估的不是角色,而是他们是否有权访问特定实体(在这种情况下为公司)。在我的控制器中,我收到一个包含firmId 作为参数的http 请求,我想确保该用户已获得该公司的许可。这可能使用当前的弹簧安全注释吗?我正在寻找一个优雅的解决方案,我一直在将自定义约束验证器视为 jsr303 规范的一部分。下面是方法头。
public ModelAndView getSessionsJson(HttpServletRequest request,
HttpServletResponse response) throws ServletRequestBindingException
【问题讨论】:
【参考方案1】:我认为你可以这样做:
public ModelAndView getSessionsJson(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException
Integer firmId = getFirmId(request);
Firm firm = getFirmById(firmId);
doSomeBusinessLogic(firm);
.....
@PreAuthorize("hasPermission(#firm, 'admin')")
public void doSomeBusinessLogic(Firm firm)
....
....
将pre and post annotations 与ACL module 结合使用。当然之前需要设置ACL DB schema,并为每个事务所对象准备ACL权限。
【讨论】:
我喜欢使用访问控制列表的想法,只是好奇这样做有什么性能提升吗?因为我想象条目表在有这么多用户的情况下会变得非常大。 来自官方文档:“Spring Security ACL 模块的主要功能之一是提供一种高性能的 ACL 检索方式”。确保 ACL 对您来说足够快的唯一方法是填充数据并检查响应时间。以上是关于使用自定义 spring 安全注解的主要内容,如果未能解决你的问题,请参考以下文章