WEB开发网
开发学院软件开发Java 精通 Grails: 文件上传和 Atom 联合 阅读

精通 Grails: 文件上传和 Atom 联合

 2009-10-26 00:00:00 来源:WEB开发网   
核心提示: 注意 <g:select> 元素,字段名为 author.id,精通 Grails: 文件上传和 Atom 联合(3),在 “GORM - 有趣的名称,严肃的技术” 中可以了解到,使客户端的黑客有机会为 author.id 注入不同的值,为确保彻底的安全,列表

注意 <g:select> 元素。字段名为 author.id。在 “GORM - 有趣的名称,严肃的技术” 中可以了解到,列表中显示的文本来自 User.toString() 方法。该文本通常也是表单提交时作为字段值发回到服务器的值。在这里,optionKey 属性覆盖字段值,从而发回 Author 的 id。

为 EntryController.groovy 提供 author.id 字段的最快方式是将一个隐藏字段添加到表单中,如清单 3 所示。由于执行 create 动作前必须登录,而登录的 User 是博客条目的 author,因此对于这个值可以安全地使用 session.user.id。

清单 3. 从表单传递 author.id 字段

<g:form action="save" method="post" > 
 <input type="hidden" name="author.id" value="${session.user.id}" /> 
 <!-- SNIP --> 
</g:form> 

对于像 Blogito 这样的简单的应用程序,这样也许就足够了。但是,这样做留下了一个漏洞,使客户端的黑客有机会为 author.id 注入不同的值。为确保彻底的安全,可以在 save 闭包中添加 Entry.author,如清单 4 所示:

清单 4. 将 author.id 保存在服务器上

def save = { 
  def entryInstance = new Entry(params) 
  entryInstance.author = User.get(session.user.id) 
  if(!entryInstance.hasErrors() && entryInstance.save()) { 
    flash.message = "Entry ${entryInstance.id} created" 
    redirect(action:show,id:entryInstance.id) 
  } 
  else { 
    render(view:'create',model:[entryInstance:entryInstance]) 
  } 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:精通 Grails 文件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接