使用自定义 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 安全注解的主要内容,如果未能解决你的问题,请参考以下文章

在Spring中怎么拦截自定义的注解

Spring自定义注解

springboot中关于自定义注解校验

你的开发利器Spring自定义注解

使用自定义注解做参数必填的校验

210630:springBoot自动配置-自定义start