3

我的问题:

我很想在我的 Grails 应用程序中使用 Spring Security 插件的访问控制/授权机制,而不必使用插件的身份验证机制。我发现的各种 Grails Spring Security 插件示例(例如这个)结合了这两个功能。有没有一种简单的方法来进行访问控制?

背景:

  • 我想为我现有的应用程序添加基于角色的访问控制。我很想只注释我的控制器或使用 Config.groovy 映射方法来设置访问控制。
  • 我的应用程序已经有一个用户域类。
  • 用户域类已经使用 BCrypt 处理加密密码。
  • 该应用程序没有“角色”域类。
  • 我已经有了用于处理登录和注销的控制器操作、视图和业务逻辑。我没有兴趣用插件的实现替换它。

在正确的轨道上,但不是很有帮助:

我知道这是可能的,正如另一个问题中所解释的那样:但是,这些问题及其答案解释了如何使用原始 Spring Security 框架在 Java 应用程序中执行此操作。我希望有人以与 Grails Spring Security 插件的最新版本(撰写本文时为 1.2.7.3)兼容的方式来说明如何执行此操作。我不想重新发明插件已经处理好的轮子。

此外,此示例解释了如何执行其中一些操作,但它似乎已过时,因为它基于使用 Spring Security 2.x 的旧版本插件。它也只对应用程序的一个部分使用自定义身份验证,而它看起来仍然在其他地方使用 Spring Security 插件的域类。

怎么做?

有人可以为我制定一个方法吗?我假设我需要创建我的角色域类。之后,我假设它将涉及自定义身份验证对象等。但是我如何让他们使用插件的现有代码呢?

4

2 回答 2

3

您可以使用自定义身份验证提供程序,我有一个更新版本,这是我最近一次谈话的一部分。请参阅此博客文章,其中包含示例应用程序和演讲视频链接:http ://burtbeckwith.com/blog/?p=1090

使用自定义会很简单UserDetailsService- 这是插件最常见的自定义,因此它在文档中有自己的章节:http: //grails-plugins.github.com/grails-spring-security-core/ docs/manual/guide/11%20Custom%20UserDetailsS​​ervice.html

基本上,您需要创建一个 Spring SecurityUser实例,而 Spring Security(和插件)并不关心您如何获取数据。因此,您的自定义UserDetailsService只需要成为您当前的身份验证方案和 Spring Security 之间的桥梁。

于 2012-09-11T20:54:26.327 回答
1

我最终创建了自己的访问控制/授权机制,而不是使用 Spring Security 插件。我永远无法弄清楚如何将插件的身份验证机制与授权机制分开。自己做这项工作非常容易。

我做了以下事情:

  • 创建了一个新的角色域类。
  • 向我的 User 域类添加了 Set 属性和 hasMany 关系。
  • 创建了一个新的 AuthorizationFilters 过滤器。这是我输入授权规则的地方。在这个过滤器中,我可以检查用户是否具有访问给定 URL 并重定向到登录页面、重定向到“未授权页面”或允许他们通过所需的角色。

这没有插件好的语法糖,也不是很简洁,但它很容易实现和理解。

于 2012-09-17T02:16:58.893 回答