使用 Grails Spring Security Plugin Core 和 REST 从用户响应中省略密码字段
Posted
技术标签:
【中文标题】使用 Grails Spring Security Plugin Core 和 REST 从用户响应中省略密码字段【英文标题】:Omit password field from User response using 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"
,
// ...
例如,如何自定义此响应并消除密码字段?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于使用 Grails Spring Security Plugin Core 和 REST 从用户响应中省略密码字段的主要内容,如果未能解决你的问题,请参考以下文章
Grails - grails-spring-security-rest - 无法从 application.yml 加载 jwt 机密
使用 Spring Security Grails 插件编码密码
Grails + spring-security-core:用户登录后如何分配角色?