使用Grails Spring Security Plugin Core& amp;来自User response的Omit密码字段。休息

时间:2017-01-25 00:32:59

标签: json grails plugins spring-security response

我正在使用 Grails 3.2.4 和Grails Spring Security插件 Core&休息。当请求用户#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"
  },
  // ...

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

2 个答案:

答案 0 :(得分:3)

有几种方法可以实现这一点,但最简单的方法是在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

答案 1 :(得分:1)

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

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

首先尝试使用命令

grails generate-views [yourpackage.]security.User

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

如果视图的生成成功,您将在 \ 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