天一博客
天一博客
EasyJF官方博客
我的首页
文章
相册
圈子
留言
管理
 
    当前所在页面:首页>>文章>>EasyJWeb数据转换和数据验证的问题
EasyJWeb数据转换和数据验证的问题
    作者:天一 来源: 发表时间:2008-03-11

 
 

EasyJWeb中将vo转换为po的方法很简单,就是执行WebForm.toPo()方法。在执行这个方法的过程中还会对vo进行数据验证,具体验证方式由domain中定义的验证器来定。

昨天我们遇到这样一个问题,一个domain有很多很多的字段,这些字段不是在同一个表单域提交,例如a是在A表单域提交,b是在B表单域提交,其中b加了验证器,那么在提交A表单域的时候会将b字段的值覆盖为空。相信大家以后也可能会遇到这个问题,所以我这里简单说一下出现这个问题的原因和解决办法。

先说说原因。因为EasyJWeb中使用的这种数据转换方式自由度太大,很容易造成域模型不安全。例如,如果我没有给域模型加验证器和注入限制,那么我在前台提交的数据都会被保存到域模型中,也就是说我可以轻易的改掉你的密码或者消费掉你帐号里钱。这个时候就需要数据验证和注入限制。

那么我们是应该以前台数据为准还是以我们定义的验证器为准呢?首先,以前台数据为准的时候写代码会很爽,简简单单的toPo一下就ok了,但是这样确会有安全问题。而以验证器为准可以保证数据的安全性,但会带来一些不容易发现的错误,就像上面说的那种情况,对EasyJWeb不熟悉的人很难找出问题所在。

那么我们该如何解决数据验证的时候带来的问题呢?

1、不用验证器,在action中自己验证(有点不爽)。

2、在表单中加上隐藏表单域,通过这个隐藏域将值传递回去(字段多的时候是噩梦)。

3、不用WebForm.toPo(),手动转换(有点麻烦)。

4、另外写一个DTO,专门做数据转换和验证(也有点麻烦)。

上面的几种解决办法,都不是很方便,而且在开发的时候这个问题很容易被忽视,而很可能导致数据不安全或者数据不完整。这里我建议对需要保密的数据,最好手动来赋值,不要使用注入。

 

 
 

(阅读 )   评论数(:0)
评论】 【收藏】
评论:共0条

发表评论:
发表人:
评论: 
验证码:
请输入前面图中的四位验证码,字母不区分大小写
  
 
关于我们 | 诚聘英才 | 联系我们 | 广告业务 | 网站地图 | 法律声明

EasyJF开源团队版权所有  建议使用1024*768分辨率