【问题标题】:Omit password field from User response using Grails Spring Security Plugin Core & REST使用 Grails Spring Security Plugin Core 和 REST 从用户响应中省略密码字段
【发布时间】:2017-06-10 00:50:28
【问题描述】:

我正在使用 Grails 3.2.4 和 Grails Spring Security Plugin Core & REST。当向 User#index 发出请求时,我使用

params.max = Math.min(max ?: 10, 100)
respond User.list(params), model: [userCount: User.count()]

响应类似于:

[
  {
    "id": 3,
    "accountExpired": false,
    "accountLocked": false,
    "enabled": true,
    "password": "$2a$10$fdWi7i48Kw5tnpzsjKMUMOQDx7nhglp9tRtDaJHTAi5qOTdIL0t3u",
    "passwordExpired": false,
    "username": "me"
  },
  {
    "id": 4,
    "accountExpired": false,
    "accountLocked": false,
    "enabled": true,
    "password": "$2a$10$3uFrDjJ8AwMsdMbKhExece6cJtQ4DS2e1/jFMIdDHrmqgDGpBgkS2",
    "passwordExpired": false,
    "username": "master"
  },
  // ...

例如,如何自定义此响应并消除密码字段?

【问题讨论】:

    标签: json grails plugins spring-security response


    【解决方案1】:

    有几种方法可以实现这一点,但最简单的方法是在resources.groovy 中注册一个JsonRenderer 类型的bean,如下所示:

    import grails.rest.render.json.JsonRenderer
    
    beans = {
        userRenderer(JsonRenderer, User) {
            excludes = ['password']
        }
    }
    

    更多方法请参考https://docs.grails.org/latest/guide/webServices.html#renderers

    【讨论】:

      【解决方案2】:

      如果您在项目中使用 JSON-VIEWS 功能并且您的控制器继承自 RestfulController,您还可以执行以下操作:

      注意:我假设您的用户类名为 User

      首先尝试使用命令

      grails generate-views [yourpackage.]security.User
      

      其中 [yourpackage.] 是可选的,表示您在执行 s2-quickstart 命令时创建用户类的包的名称。

      如果视图生成成功,您会在 \grails-app\views 中找到一个名为 user 的目录,其中包含以下文件

      • _user.gson
      • index.gson
      • show.gson

      这些应该是您的用户的 json 视图。打开 _user.gson。它应该有如下内容

      import [yourpackage.]security.User
      
      model {
          User user
      }
      
      json g.render(user)
      

      编辑代码,使其从 json 渲染中排除密码

      import [yourpackage.]security.Usuario
      
      model {
          User user
      }
      
      json g.render(user, [excludes: ['password']) //This is where you exclude password
      

      这似乎比编辑 bean 稍微复杂一些,但在我看来,寻找相关视图可能比查看 resources.groovy 更容易,如果其他人想要编辑项目。

      有关此检查的更多信息,请查看grails reference to json views

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-09
        • 2013-03-15
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        • 2012-11-19
        • 2014-12-21
        • 2014-07-30
        相关资源
        最近更新 更多