【问题标题】:Spring Security on Grails and Tomcat Security with RealmsGrails 上的 Spring Security 和 Realms 的 Tomcat 安全性
【发布时间】:2011-11-11 06:46:46
【问题描述】:

我使用的是当前的 Grails 版本 1.3.7,在相当新的 mySQL 版本上针对遗留数据库模式进行编程。有userroles 的表和第三个表以m2m 方式链接两者roles_has_user。原则上这很好,并且是 grails 方式,但需要注意的一件有趣的事情是表 roles_has_user 有两列:username VARCHAR(20)rolename VARCHAR(20)。我需要这个表结构,因为另一个应用程序能够使用 Tomcat 自己的身份验证机制来保护一些 Web 服务调用。

这似乎是一个问题:第一件事是我似乎无法正确获取我的域类的 m2m 映射。 有人可以指点我解释在 grails m2m 中使用 PK ID 字段(即使它是生成/自定义 ID)以外的东西作为 FK 的地方吗?

第二个问题是我有点担心我永远不会在 Spring Security 上玩这个游戏,有没有人(成功地)尝试过这样做?

可以选择通过另一个(新)表映射关系,然后使用必要的字符串字段username VARCHAR(20)rolename VARCHAR(20) 更改 CRUD 控制器以镜像roles_has_user 表中的关系。但这听起来很笨拙……

感谢您的宝贵时间,请告知...如果您需要更多信息,请直接询问,我会尽量说清楚。

【问题讨论】:

    标签: grails spring-security many-to-many grails-orm


    【解决方案1】:

    第二个问题是我有点担心我永远不会在 spring security 上玩这个游戏,有没有人(成功地)尝试过这样做?

    一旦您知道如何操作,就可以轻松地将 Spring Security 插件与旧版用户/角色数据集成。 “遗留”是指用户和角色类不是使用 Spring Security 插件创建的,甚至可能不是 Grails 域类。

    步骤如下:

    1. 定义一个从现有User 域类中读取的UserDetails 实现
    2. 定义返回 (1) 实例的自定义 UserDetailsService 实现
    3. 将 (2) 的实例注册为名为 userDetailsService 的 Spring bean(例如在 resources.groovy 中)。

    更多详情here

    【讨论】:

      【解决方案2】:

      可能最好的选择是使用代理键(即整数 id 值)规范化您的数据模型。

      如果这不是一个选项,我会尝试为 id 进行静态映射。比如:

      id generator: 'assigned', name: 'username', type: 'string'

      然后在域对象上添加 hasMany / hasMany+belongsTo。

      您可能还需要为连接表和连接列指定自定义多对多映射。

      static mapping = {
         roles column:'username', joinTable:'ROLES_HAS_USER'
      }
      

      这不是一个完整的工作解决方案,但希望它能让您走上正确的道路。如果您在发布代码时遇到问题,那么我们有一些具体的东西可以看。

      【讨论】:

        猜你喜欢
        • 2014-02-05
        • 1970-01-01
        • 2012-06-15
        • 2020-07-01
        • 1970-01-01
        • 2016-06-29
        • 2011-10-04
        • 1970-01-01
        • 2012-12-28
        相关资源
        最近更新 更多