如何动态构建映射列表 - 而不是:
class UrlMappings {
static mappings = {
"/helpdesk/user/$action?/$id?" (controller="helpdeskuser")
"/helpdesk/group/$action?/$id?" (controller="helpdeskgroup")
"/helpdesk/company/$action?/$id?" (controller="helpdeskcompany")
"/helpdesk/account/$action?/$id?" (controller="helpdeskaccount")
"/admin/company/$action?/$id?" (controller="admincompany")
"/admin/account/$action?/$id?" (controller="adminaccount")
}
}
Run Code Online (Sandbox Code Playgroud)
像这样的伪代码:
class UrlMappings {
static mappings = {
application.controllerClasses.each {
if(it.name.startsWith('helpdesk'))
"/helpdesk/${it.name}/$action?/$id?" (controller="${it.name}")
if(it.name.startsWith('admin'))
"/admin/${it.name}/$action?/$id?" (controller="${it.name}")
}
}
}
Run Code Online (Sandbox Code Playgroud)
(我不明白静态映射是什么 - 哈希映射?自由变量?)
我想要实现的是基于控制器类型的映射 - 例如帮助台,管理员或用户控制器.一旦我设置了映射,我想基于URL添加安全性,但我不想单独映射每个控制器:
grails.plugins.springsecurity.interceptUrlMap = [
'/helpdesk/**': ['ROLE_HELPDESK','ROLE_ADMIN'],
]
Run Code Online (Sandbox Code Playgroud) 我有一个 postgres jsonb 查询,如下所示:
Blog.where("upload_data @> '[ { \"name\": \"#{name}\" }]'")
Run Code Online (Sandbox Code Playgroud)
哪个有效但破坏了构建,因为优秀的刹车员指出了可能的 sql 注入风险。如果我使用绑定变量:
Blog.where("upload_data @> '[ { \"name\": ? }]'", name)
Run Code Online (Sandbox Code Playgroud)
它创建一个 sql 查询,如:
WHERE upload_data @> '[ { "name": 'name' }]'
Run Code Online (Sandbox Code Playgroud)
注意单引号 - 这是一个无效的查询
如果我使用单引号,我会得到:
WHERE upload_data @> "[ { 'name': 'name' }]"
Run Code Online (Sandbox Code Playgroud)
这是无效的
我已经尝试了其他一些事情,但我想要的是绑定变量评估为带双引号的字符串:
WHERE upload_data @> '[ { "name": "name" }]'
Run Code Online (Sandbox Code Playgroud)
或不同的解决方案 - 除了让刹车员跳过文件。