浏览 2028 次
锁定老帖子 主题:讨论--关于update一些细节问题
精华帖 (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掉 与个人有关的信息(先验证该用户是否拥有该资源,才能操作) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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掉 -- 不管是简单版,还是升级版,都会出现这个问题,个人是通过每次更新或删除时判断“录入人”是否与当前用户一致,否则拒绝修改,不知道楼主如何操作?
|
|
返回顶楼 | |
发表时间:2012-08-23
hellostory 写道
安全问题:提交表单数据时,打开firebug--修改id,然后华丽丽的hack掉 -- 不管是简单版,还是升级版,都会出现这个问题,个人是通过每次更新或删除时判断“录入人”是否与当前用户一致,否则拒绝修改,不知道楼主如何操作?
安全问题是都存在 处理方式:1.调用时候验证:在service方法里面增加用户id参数,调用前都统一validate 2.调用前验证对比,比如在action里面 类似操作较多,都可以统一配置,AOP或者web的拦截器都可以,不过AOP在业务层拦截比较好点
|
|
返回顶楼 | |