首页 文章

Grails Spring Security插件无需身份验证的访问控制/授权?

提问于
浏览
3

My problem:

我很想使用Spring Security插件's access control/authorization mechanism with my Grails application without having to use the plugin'的身份验证机制 . 我发现各种Grails Spring Security插件示例(like this one)结合了这两个功能 . 是否有一种简单的方法来进行访问控制?

Background:

  • 我想在现有应用中添加基于角色的访问控制 . 我很乐意只是注释我的控制器或使用Config.groovy映射方法来设置访问控制 .

  • 我的应用已经拥有用户域类 .

  • 用户域类已经使用BCrypt处理加密密码 .

  • 该应用没有"role"域类 .

  • 我已经拥有用于处理登录和注销的控制器操作,视图和业务逻辑 . 我没兴趣用插件的实现替换它 .

On the right track, but not quite helpful:

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

另外,这个example解释了如何做到这一点,但它似乎已经过时了,因为它基于使用Spring Security 2.x的旧版本插件 . 它也只对应用程序的一个部分使用自定义身份验证,而它看起来仍然在其他地方使用Spring Security插件的域类 .

How to do it?

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

2 回答

  • 3

    您可以使用自定义身份验证提供程序,我有一个更新版本,我在最近的演讲中做了一些 . 请参阅此博客文章,其中包含示例应用程序并链接到该演讲的视频:http://burtbeckwith.com/blog/?p=1090

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

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

  • 1

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

    我做了以下事情:

    • 创建了一个新的Role域类 .

    • 为我的用户域类添加了一个Set属性和hasMany关系 .

    • 创建了一个新的AuthorizationFilters过滤器 . 这是我放入授权规则的地方 . 在此过滤器中,我可以检查用户是否具有访问给定URL所需的角色并重定向到登录页面,重定向到"not authorized page"或允许它们通过 .

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

相关问题