grails - 无效角色时如何在 api-rest grails 上返回 403
问题描述
我在 application.groovy 上有这个配置
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
[pattern: '/', access: ['permitAll']],
[pattern: '/application/index', access: ['permitAll']], // show application index whithout authenticantion.
[pattern: '/notAuthorized', access: ['permitAll']], // permitAll to render notAuthorized json.
[pattern: '/**', access: ['ROLE_ADMIN', 'ROLE_OTHER']] // valid paths in api to require authentication.
]
在控制器中,我有:
FooController {
@Secured(['ROLE_ADMIN'])
def action1() {
/*code*/
}
@Secured(['ROLE_OTHER'])
def action2() {
/*code*/
}
}
当用户拥有ROLE_OTHER
并尝试访问/api/foo/action1
它时不允许它,这是正确的,因为他没有权限,但是返回状态是 404。我知道这些 url 不会将它们映射到没有权限的角色,但是有没有办法403
代替devovler 404
?
解决方案
取决于 Grails API 插件。BeAPI API 插件会自动检查角色并执行此操作(无需额外编码)。您只需确保将角色添加到您的架构中:
"update": {
"METHOD": "PUT",
"DESCRIPTION": "Description for update",
"ROLES": {
"BATCH": ["ROLE_ADMIN"]
},
"REQUEST": {
"ROLE_ADMIN":["firstName","passwordExpired","accountExpired","oauthProvider","username","accountLocked","password","lastName","oauthId","enabled","avatarUrl","email","id","version"]
},
"RESPONSE": {
"ROLE_ADMIN":["id"]
}
},
哦,所以没有人阻止这个响应,我是上述插件的维护者。
推荐阅读
- c++ - C++迷宫问题,如何去除重复?
- ios - Codemagic IOS 构建 - 无法构建 iOS 应用程序 - 是什么原因?
- python - Pandas Dataframe - 如何检查列中数值的符号,如果为负则删除符号并在发生这种情况时创建另一列?
- node.js - 带有 node.js/TypeScript 的 DynamoDB 文档客户端
- android - 使用 Hilt 注入 viewModel 时不调用 init
- python - 不同维度矩阵的二项式公式实现
- python - 来自 scipy.optimize 的曲线拟合不起作用
- python - 在编辑预订django上使编辑功能没有冲突
- c - 读取未初始化的 malloc() 内存会调用未定义的行为吗?
- javascript - 从另一个模块的异步回调函数返回的值未定义