论坛首页 Java企业应用论坛

讨论--关于update一些细节问题

浏览 2001 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-22   最后修改:2012-08-22
先假定一个model实体,有十六个字段,然后service提供update(Model model)

现在要提供更新功能,通常根据划分为可修改字段,不可修改字段,我们提供修改功能的时候,反应到具体代码层

1.简单版:form表单提交时候,传递参数拥有完整的16字段,虽然页面要么隐藏要么展现,可修改不可修改,种种折腾

提交处理:表单包含16个字段,全部提交,然后update


2.升级版:业务只需要提供16个字段中的三个字段修改,其它也不需要用户知道,上面的处理方式没问题,但是form表单参数搞写那么多字段很烦,大家都很懒,页面给需要更改的就好

提交处理:三个字段+标识字段id就可以了



对升级版本调用update(Model model)问题:好多字段都会没有set值,导致model没有set值得字段值为类加载jvm中给的初始值,调用后没set值得全为jvm给的初始值

解决方式:1.更新那些字段,我重新写update就好--可以,好麻烦,要快速开发呢,理性的说根据排列组合16个字段除了表示字段,能组合N中更新页面,那不是对于N中update方法

     2.sql语句拦截,判断字段为Empty就不更新该字段 比如ibatis里面通过ognl判断---如果用户填了信息,想不填,你还不让了,这个各种bug

     3.页面set值到model之前,先填充model,struts2的Preparable,ModelDriven结合使用就是这么干的

安全问题:提交表单数据时,打开firebug--修改id,然后华丽丽的hack掉
                  与个人有关的信息(先验证该用户是否拥有该资源,才能操作)








   发表时间:2012-08-23   最后修改:2012-08-23

2.sql语句拦截,判断字段为Empty就不更新该字段 比如ibatis里面通过ognl判断---如果用户填了信息,想不填,你还不让了,这个各种bug 

-- 这个的确是个问题!比如,用户想将“备注”字段以前输入的内容清空,就没法操作了!

 

  3.页面set值到model之前,先填充model,struts2的Preparable,ModelDriven结合使用就是这么干的 

-- 我一般也是这么做的,不过都是先通过findById()获取model,然后再通过model.setValue(xxxForm.getValue())将前台的参数值赋值给model,最后调用update()保存更新。不过感觉每次都需要findById,操作太麻烦了。

 

安全问题:提交表单数据时,打开firebug--修改id,然后华丽丽的hack掉 

-- 不管是简单版,还是升级版,都会出现这个问题,个人是通过每次更新或删除时判断“录入人”是否与当前用户一致,否则拒绝修改,不知道楼主如何操作?

 

0 请登录后投票
   发表时间:2012-08-23  
hellostory 写道

 

安全问题:提交表单数据时,打开firebug--修改id,然后华丽丽的hack掉 

-- 不管是简单版,还是升级版,都会出现这个问题,个人是通过每次更新或删除时判断“录入人”是否与当前用户一致,否则拒绝修改,不知道楼主如何操作?

 

安全问题是都存在

处理方式:1.调用时候验证:在service方法里面增加用户id参数,调用前都统一validate

               2.调用前验证对比,比如在action里面

类似操作较多,都可以统一配置,AOP或者web的拦截器都可以,不过AOP在业务层拦截比较好点

 

 

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics