【问题标题】:Using custom spring security annotations使用自定义 spring 安全注解
【发布时间】:2013-05-24 23:36:35
【问题描述】:

我正在尝试使用 @PreAuthorize 和 @Secured 之类的 springs 安全注释,但我希望评估的不是角色,而是他们是否有权访问特定实体(在这种情况下为公司)。在我的控制器中,我收到一个包含firmId 作为参数的http 请求,我想确保该用户已获得该公司的许可。这可能使用当前的弹簧安全注释吗?我正在寻找一个优雅的解决方案,我一直在将自定义约束验证器视为 jsr303 规范的一部分。下面是方法头。

public ModelAndView getSessionsJson(HttpServletRequest request,
  HttpServletResponse response) throws ServletRequestBindingException {}

【问题讨论】:

    标签: spring spring-mvc spring-security spring-3


    【解决方案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 annotationsACL module 结合使用。当然之前需要设置ACL DB schema,并为每个事务所对象准备ACL权限。

    【讨论】:

    • 我喜欢使用访问控制列表的想法,只是好奇这样做有什么性能提升吗?因为我想象条目表在有这么多用户的情况下会变得非常大。
    • 来自官方文档:“Spring Security ACL 模块的主要功能之一是提供一种高性能的 ACL 检索方式”。确保 ACL 对您来说足够快的唯一方法是填充数据并检查响应时间。
    猜你喜欢
    • 2017-01-11
    • 2016-05-18
    • 2013-02-24
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多