基于Spring安全组的授权

时间:2011-10-10 12:22:19

标签: security spring java-ee spring-security

我打算制作基于群组的权限计划,但我对以下内容感到困惑:

我有一些问题:

  1. 最佳方法是什么User > Group > Roles > Permissions User > Roles > Permissions
  2. 在这种情况下如何实现安全性(登录/记住我)(需要指向良好教程的链接)。
  3. 方法级安全性将使用注释@PreAutorize hasPermission(#, '')或hasRole或what?
  4. 我将如何在UI中隐藏组件(非管理员的管理),具体取决于权限(UI是JSF)?
  5. 如果我隐藏了视图中的组件那么方法级别安全性的重要性呢?

3 个答案:

答案 0 :(得分:8)

设计安全模型本身并不是一项简单的任务,如果没有对域的详细了解,那么您尝试保护它几乎是不可能的。话虽如此,你可以在这里得到的任何建议都是一般的,一般你的问题是。

1)在大多数应用程序中User -> Roles就足够了。在更复杂的问题中,可以使用User -> Roles -> Permissions,但这一切都取决于您如何定义每个范围。通常,细粒度的角色并将其中的一些角色分配给用户正是您所需要的。我会说另一个级别是在中间添加Groups有点太多了。想象一下它作为一个文件系统 - 平面文件系统存在并且看起来不那么复杂。在决定这一点时花点时间,因为这是最重要的决定之一,并且会产生很多不易预测的含义。

2)认证和记忆机制已在Spring Security中实现 - 您需要做的就是选择最适合您的实现并使用安全命名空间支持对其进行配置。如果您还没有,请查看Petclinic示例应用和此tutorial

3)如果您决定使用权限,则应始终检查权限。保持您选择的增益级别。始终如一。总是

4)根据您使用的视图技术,JSP taglib可能派上用场(如Ralph所述)。 JSF没有这样的东西 - 但写一些类似的东西相对简单。

5)正如拉尔夫所说,如果你隐藏某些东西并不意味着它不再存在 - 它仍然可以被非特权用户调用。

答案 1 :(得分:3)

Spring Security 4-SNAPSHOT

权限组

http://docs.spring.io/autorepo/docs/spring-security/4.0.0.CI-SNAPSHOT/reference/htmlsingle/#authority-groups

另一种方法是将权限划分为组并进行分配 分组给用户。

答案 2 :(得分:1)

5)即使你在GUI中隐藏了一些功能,恶意用户也可以发送一个伪造的HTTP请求来调用你的函数。

4)对于JSP,有spring security tag lib,也许JSF有类似的东西

3)取决于您的角色 - 权限分配

的实施

2)身份验证并记住我与使用群组无关。

1)取决于您的需求。组使其变得更加困难,因此我将从用户角色权限开始,并在我真正需要时添加组。 - Spring提供了一个开箱即用的解决方案,可以将用户分配给权限。添加角色很容易。但是如果你从群组开始,你必须自己实现它。

我强烈建议您阅读Spring-Security-Docs。 要么你以春季安全推荐的方式做到这一点:“Suggested Steps for Getting Started with Spring Security”或者你读过(非常好的)书“Spring Security 3”(由该框架的一些作者撰写)。

如果你按照教程进行操作,你会发现如何进行简单的登录并记住我。

要有不同的角色和权限,您有两种选择。

  • 春季3有一个集成解决方案(您必须搜索一个 - 我不使用它。)
  • 您可以实施自己的授权提供程序,通过已分配的角色添加权限。