DWR传入对象数组作为参数传入函数报错的问题如何解决

有参数的函数,返回值为数组如何调用
[问题点数:50分,结帖人l8734974]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:0
本版专家分:52373
2018年6月 VB大版内专家分月排行榜第一2018年5月 VB大版内专家分月排行榜第一2018年4月 VB大版内专家分月排行榜第一2018年3月 VB大版内专家分月排行榜第一2018年2月 VB大版内专家分月排行榜第一2018年1月 VB大版内专家分月排行榜第一2017年9月 VB大版内专家分月排行榜第一2017年8月 VB大版内专家分月排行榜第一2017年7月 VB大版内专家分月排行榜第一2017年6月 VB大版内专家分月排行榜第一2017年5月 VB大版内专家分月排行榜第一2017年4月 VB大版内专家分月排行榜第一2016年11月 VB大版内专家分月排行榜第一2016年8月 VB大版内专家分月排行榜第一2016年7月 VB大版内专家分月排行榜第一2013年12月 VB大版内专家分月排行榜第一2013年10月 VB大版内专家分月排行榜第一2013年9月 VB大版内专家分月排行榜第一2008年5月 VB大版内专家分月排行榜第一
2017年12月 VB大版内专家分月排行榜第二2017年11月 VB大版内专家分月排行榜第二2017年3月 VB大版内专家分月排行榜第二2016年12月 VB大版内专家分月排行榜第二2016年10月 VB大版内专家分月排行榜第二2013年11月 VB大版内专家分月排行榜第二
2016年3月 VB大版内专家分月排行榜第三2012年9月 VB大版内专家分月排行榜第三
本版专家分:52373
2018年6月 VB大版内专家分月排行榜第一2018年5月 VB大版内专家分月排行榜第一2018年4月 VB大版内专家分月排行榜第一2018年3月 VB大版内专家分月排行榜第一2018年2月 VB大版内专家分月排行榜第一2018年1月 VB大版内专家分月排行榜第一2017年9月 VB大版内专家分月排行榜第一2017年8月 VB大版内专家分月排行榜第一2017年7月 VB大版内专家分月排行榜第一2017年6月 VB大版内专家分月排行榜第一2017年5月 VB大版内专家分月排行榜第一2017年4月 VB大版内专家分月排行榜第一2016年11月 VB大版内专家分月排行榜第一2016年8月 VB大版内专家分月排行榜第一2016年7月 VB大版内专家分月排行榜第一2013年12月 VB大版内专家分月排行榜第一2013年10月 VB大版内专家分月排行榜第一2013年9月 VB大版内专家分月排行榜第一2008年5月 VB大版内专家分月排行榜第一
2017年12月 VB大版内专家分月排行榜第二2017年11月 VB大版内专家分月排行榜第二2017年3月 VB大版内专家分月排行榜第二2016年12月 VB大版内专家分月排行榜第二2016年10月 VB大版内专家分月排行榜第二2013年11月 VB大版内专家分月排行榜第二
2016年3月 VB大版内专家分月排行榜第三2012年9月 VB大版内专家分月排行榜第三
本版专家分:52373
2018年6月 VB大版内专家分月排行榜第一2018年5月 VB大版内专家分月排行榜第一2018年4月 VB大版内专家分月排行榜第一2018年3月 VB大版内专家分月排行榜第一2018年2月 VB大版内专家分月排行榜第一2018年1月 VB大版内专家分月排行榜第一2017年9月 VB大版内专家分月排行榜第一2017年8月 VB大版内专家分月排行榜第一2017年7月 VB大版内专家分月排行榜第一2017年6月 VB大版内专家分月排行榜第一2017年5月 VB大版内专家分月排行榜第一2017年4月 VB大版内专家分月排行榜第一2016年11月 VB大版内专家分月排行榜第一2016年8月 VB大版内专家分月排行榜第一2016年7月 VB大版内专家分月排行榜第一2013年12月 VB大版内专家分月排行榜第一2013年10月 VB大版内专家分月排行榜第一2013年9月 VB大版内专家分月排行榜第一2008年5月 VB大版内专家分月排行榜第一
2017年12月 VB大版内专家分月排行榜第二2017年11月 VB大版内专家分月排行榜第二2017年3月 VB大版内专家分月排行榜第二2016年12月 VB大版内专家分月排行榜第二2016年10月 VB大版内专家分月排行榜第二2013年11月 VB大版内专家分月排行榜第二
2016年3月 VB大版内专家分月排行榜第三2012年9月 VB大版内专家分月排行榜第三
本版专家分:537
本版专家分:129
本版专家分:0
本版专家分:0
本版专家分:52373
2018年6月 VB大版内专家分月排行榜第一2018年5月 VB大版内专家分月排行榜第一2018年4月 VB大版内专家分月排行榜第一2018年3月 VB大版内专家分月排行榜第一2018年2月 VB大版内专家分月排行榜第一2018年1月 VB大版内专家分月排行榜第一2017年9月 VB大版内专家分月排行榜第一2017年8月 VB大版内专家分月排行榜第一2017年7月 VB大版内专家分月排行榜第一2017年6月 VB大版内专家分月排行榜第一2017年5月 VB大版内专家分月排行榜第一2017年4月 VB大版内专家分月排行榜第一2016年11月 VB大版内专家分月排行榜第一2016年8月 VB大版内专家分月排行榜第一2016年7月 VB大版内专家分月排行榜第一2013年12月 VB大版内专家分月排行榜第一2013年10月 VB大版内专家分月排行榜第一2013年9月 VB大版内专家分月排行榜第一2008年5月 VB大版内专家分月排行榜第一
2017年12月 VB大版内专家分月排行榜第二2017年11月 VB大版内专家分月排行榜第二2017年3月 VB大版内专家分月排行榜第二2016年12月 VB大版内专家分月排行榜第二2016年10月 VB大版内专家分月排行榜第二2013年11月 VB大版内专家分月排行榜第二
2016年3月 VB大版内专家分月排行榜第三2012年9月 VB大版内专家分月排行榜第三
本版专家分:0
本版专家分:52373
2018年6月 VB大版内专家分月排行榜第一2018年5月 VB大版内专家分月排行榜第一2018年4月 VB大版内专家分月排行榜第一2018年3月 VB大版内专家分月排行榜第一2018年2月 VB大版内专家分月排行榜第一2018年1月 VB大版内专家分月排行榜第一2017年9月 VB大版内专家分月排行榜第一2017年8月 VB大版内专家分月排行榜第一2017年7月 VB大版内专家分月排行榜第一2017年6月 VB大版内专家分月排行榜第一2017年5月 VB大版内专家分月排行榜第一2017年4月 VB大版内专家分月排行榜第一2016年11月 VB大版内专家分月排行榜第一2016年8月 VB大版内专家分月排行榜第一2016年7月 VB大版内专家分月排行榜第一2013年12月 VB大版内专家分月排行榜第一2013年10月 VB大版内专家分月排行榜第一2013年9月 VB大版内专家分月排行榜第一2008年5月 VB大版内专家分月排行榜第一
2017年12月 VB大版内专家分月排行榜第二2017年11月 VB大版内专家分月排行榜第二2017年3月 VB大版内专家分月排行榜第二2016年12月 VB大版内专家分月排行榜第二2016年10月 VB大版内专家分月排行榜第二2013年11月 VB大版内专家分月排行榜第二
2016年3月 VB大版内专家分月排行榜第三2012年9月 VB大版内专家分月排行榜第三
匿名用户不能发表回复!|
其他相关推荐DWR的转换器介绍
当java方法的参数不是基本数据类型也不是字符串类型时,DWR无法正常识别这种自定义类型的数据,必须在配置文件中定义转换器。转换器的作用是完成java实例和JavaScript对象之间的相互转换,从而保证Ajax交互的正常通信。
基本转换器
基本转换器的作用是用于负责完成java类型和JavaScript类型之间的相互转换。
对于普通的情形,我们无须显示使用准换器,对于所有的基本数据类型,包括String和BigDecimal等,DWR已经提供了一种简单对象的转换器,无须在dwr.xml&allow&元素中使用&convert&元素定义。
DWR默认支持的类型有:boolean、byte、short、int、long、float、double、char、java.lang.Boolean、java.lang.Byte、java.lang.Short、java.long.Integer、java.lang.Long、java.long.Float、java.long.Double、java.long.Character、java.math.BigInteger、java.math.BigDecimal和java.lang.String。
对于日期类型的数据,DWR则提供了Date转换器。Date转换器负责在JavaScript的Date类型与java中的date类型(java.util.Date、java.sql.Date、java.sql.Times或java.sql,TimeStamp)之间进行转换,DWR默认支持Date准换器。
对象准换器
DWR默认关闭了Bean和Object转换器。Bean转换器用于完成JavaBean对象和JavaScript对象之间的转换。Bean准换器默认是关闭的,因此必须在dwr.xml文件中显示打开该转换器才可以在java方法中使用对应的JavaBean实例作为参数或返回值。
Object转换器与Bean转换器的作用完全相同,都是用于完成java 对象和JavaScript对象之间的转转。但是Object转换器的功能更加强大,Object转换器通过java的反射来访问java对象的属性,即Object转换器用于转换普通的Java对象(没有getter和setter方法)。
为某个类单独打开一个Bean转换器,可以采用如下编码:
&convert converter=“bean” match=“com.bh.domain.User”/&
以上的转换器表明DWR将使用setter和getter方法访问com.bh.domain.User对象的各个属性Bean转换器要求java对象必须符合JavaBean规范,要求每个属性都必须有对应的getter方法和setter方法。
如果同时需要转换某个包下的所有类,可采用如下格式:
converter=“bean” match=“com.bh.domain.*”/&
下面的配置指定所有的类都是使用Bean转换器进行转换:
converter=“bean” match=“*”/&
在某些情况下,假设类A有x、y、z三个属性,但是希望DWR将A实例转换成javascript对象后只包含x和y属性,屏蔽z属性,则可以使用Bean转换器的限制转换功能,限制转换有两种方式:
黑名单方式:被黑名单列出的属性将不会转换到JavaScript对象中。
converter=“bean” match=“com.bh.domain.A”&
name="execlude" value="z,......"/&
白名单方式:没有被白名单列出的属性将不会转换到javascript对象中。
Object转换器
converter=“object” match=“com.bh.domain.A”&
//指定force=true强制使用反射访问私有属性
name="force" value="true"/&
数组转化器
默认情况下数组转换器是打开的,不管数组元素时基本类型还是字符串或者是其他引用数据类型,DWR都可以支持转换。因此不管远程java方法中的参数是数组还是java方法返回值是数据,都不需要在dwr.xml 中增加额外的配置。
集合类型转换器
DWR提供了两个集合转换器,两个转换器分别用于转换Map对象好collection对象。DWR默认已经打开这连个集合转换器,因此也无需在dwr.xml中额外配置。
map和collection转换器有以下两个缺点:
如果集合不使用泛型限制集合元素的类型,则DWR无法确定集合元素的类型,因此这两个转换器都不能把集合元素转换成有意义的JavaScript对象。
不能明确指定集合的类型,只能使用基于接口的类型转换。
此时DWR允许在dwr.xml中使用&signatures.../&来声明集合元素的数据类型,从而可以让DWR能正确识别集合元素的类型。当然使用泛型限制集合元素类型将会更加简洁。
import java.util.L
import com.bohua.dwr.HelloD
import com.bohua.beans.P
HelloDwr.sendListNoGeneric(List&Person&);
dwr 传递java自定义对象
DWR的使用,配置,例子,详解整理
教你如何使用Dwr
没有更多推荐了,DWR调用发送数组的方法 - ITeye问答
DWR怎么调用发送数组的方法:
主要是我不会用js组装参数,如:String[],Object, List&String&.
java code
public Integer addAnnounce(Object[] values);
public Integer addAnnounce2(String[] values);
public String sendList(List&String& pl);
List参数的方法,参数我只会写下面的形式才能调用成功:
JScript code
function sendBeanList()
//创建JavaScript数组
var args = [
{name:"客户端aaa"},
{name:"客户端bbb"},
{name:"客户端ccc"}
//Java方法需要List参数,以JavaScript数组作为参数调用远程方法
hello.sendList(args , sendListCb);
function sendListCb(data)
document.getElementById("show").innerHTML =
List参数的改成下面的形式就调用不了了:
JScript code
function sendBeanList()
//创建JavaScript数组
var args = [
{"客户端aaa"},
{"客户端bbb"},
{"客户端ccc"}
//Java方法需要List参数,以JavaScript数组作为参数调用远程方法
hello.sendList(args , sendListCb);
function sendListCb(data)
document.getElementById("show").innerHTML =
}
Why??
public Integer addAnnounce(Object[] values);
public Integer addAnnounce2(String[] values);
上面两个Java方法也是,在js中String[],和Object[](暂时里面的类弄都是String)的参数怎么传??
没测试成功,就请不要乱回贴。
谢绝灌水!!
采纳的答案
楼主的dwr配置文件中可能是有下面两行:&&
&convert converter="object" match="java.lang.Object"/&
&convert converter="object" match="java.lang.Class"/&
--&你在dwr中调用
public Integer addAnnounce2(String[] values);
public String sendList(List&String& pl);
需要将这两行配置文件注释掉,因为这样配置String[]与List&String&都会被转换成Object.
所有去掉就行了
对于下面这个方法:
public Integer addAnnounce(Object[] values);我从来没传过这种参数
已解决问题
未解决问题EXTJS 中的分页问题: 表格中的数据是通过dwr在后台组织好的数组形式的数据,应该如何实现分页显示。_百度知道
EXTJS 中的分页问题: 表格中的数据是通过dwr在后台组织好的数组形式的数据,应该如何实现分页显示。
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
你把你页面代页面和dwr后台代码发出来看看!
表格上面要给它个分页工具条,加载数据的时候给后台传两个参数,再把sql语句写好……
为您推荐:
其他类似问题
dwr的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。dwr框架中DWRUtil的方法
我的图书馆
dwr框架中DWRUtil的方法
7.3 addRows and removeAllRows
DWR通过这两个函数来帮你操作table: DWRUtil.addRows() 和 DWRUtil.removeAllRows() 。这个函数的第一个参数都是table、tbody、thead、tfoot的id。一般来说最好使用tbody,因为这样可以保持你的header和footer行不变,并且可以防止Internet Explorer的bug。
DWRUtil.removeAllRows()
DWRUtil.removeAllRows(id);
描述: 通过id删除table中所有行。 参数: id: table元素的id(最好是tbody元素的id)
DWRUtil.addRows()
DWRUtil.addRows(id, array, cellfuncs, [options]);
描述: 向指定id的table元素添加行。它使用数组中的每一个元素在table中创建一行。然后用cellfuncs数组中的没有函数创建一个列。单元格是依次用cellfunc根据没有数组中的元素创建出来的。 DWR1.1开始,addRows()也可以用对象做为数据。如果你用一个对象代替一个数组来创建单元格,这个对象会被传递给cell函数。 参数: id: table元素的id(最好是tbody元素的id) array: 数组(DWR1.1以后可以是对象),做为更新表格数据。 cellfuncs: 函数数组,从传递过来的行数据中提取单元格数据。
options: 一个包含选项的对象(见下面) 选项包括: rowCreator: 一个用来创建行的函数(例如,你希望个tr加个css). 默认是返回一个document.createElement("tr") cellCreator: 一个用来创建单元格的函数(例如,用th代替td). 默认返回一个document.createElement("td")
这是网上的例子
7.4 getText
getText(id)和getValue(id)很相似。出了它是为select列表设计的。你可能需要取得显示的文字,而不是当前选项的值。
这是网上的例子
7.5 getValue
DWRUtil.getValue(id)是 setValue()对应的"读版本"。它可以从HTML元素中取出其中的值,而你不用管这个元素是select列表还是一个div。 这个函数能操作大多数HTML元素包括select(去处当前选项的值而不是文字)、input元素(包括textarea)、div和span。
这是网上的例子
7.6 getValues
getValues()和getValue()非常相似,除了输入的是包含name/value对的javascript对象。name是HTML元素的ID,value会被更改为这些ID对象元素的内容。这个函数不会返回对象,它只更改传递给它的值。 从DWR1.1开始getValues()可以传入一个HTML元素(一个DOM对象或者id字符串),然后从它生成一个reply对象。
这是网上的例子
7.7 onReturn
当按下return键时,得到通知。 当表单中有input元素,触发return键会导致表单被提交。当使用Ajax时,这往往不是你想要的。而通常你需要的触发一些Javscript。 不幸的是不同的浏览器处理这个事件的方式不一样。所以DWRUtil.onReturn修复了这个差异。如果你需要一个同表单元素中按回车相同的特性,你可以用这样代码实现: &input type="text" onkeypress="DWRUtil.onReturn(event,submitFunction)"/& &input type="button"
onclick="submitFunction()"/&
你也可以使用onkeypress事件或者onkeydown事件,他们做同样的事情。 一般来说DWR不是一个Javascript类库,所以它应该试图满足这个需求。不管怎样,这是在使用Ajax过程中一个很有用函数。 这个函数的工作原理是onSubmit()事件只存在于&FORM ...&元素上
这是网上的例子
7.8 selectRange
选择一个输入框中的一定范围的文字。 你可能为了实现类似"Google suggest"类型的功能而需要选择输入框中的一定范围的文字,但是不同浏览器间选择的模型不一样。这DWRUtil函数可以帮你实现。 DWRUtil.selectRange(ele, start, end)
这是网上的例子
7.9 setValue
DWRUtil.setValue(id, value)根据第一个参数中指定的id找到相应元素,并根据第二个参数改变其中的值。 这个函数能操作大多数HTML元素包括select(去处当前选项的值而不是文字)、input元素(包括textarea)、div和span。
这是网上的例子
7.10 setValues
setValues()和setValue()非常相似,除了输入的是包含name/value对的javascript对象。name是HTML元素的ID,value是你想要设置给相应的元素的值。
这是网上的例子
7.11 toDescriptiveString
DWRUtil.toDescriptiveString()函数比默认的toString()更好。第一个参数是要调试的对象,第二个参数是可选的,用来指定内容深入的层次: 0: 单行调试 1: 多行调试,但不深入到子对象。 2: 多行调试,深入到第二层子对象 以此类推。一般调试到第二级是最佳的。 还有第三个参数,定义初始缩进。这个函数不应该被用于调式程序之外,因为以后可能会有变化。
这是网上的例子
7.12 useLoadingMessage
这个方法将来可能被废弃,因为这个实现实在太专断了。为什么是红色,为什么在右上角,等等。唯一的真正答案就是:抄袭GMail。这里的建议是以本页面中的代码为模板,根据你的需求自定义。 你必须在页面加载以后调用这个方法(例如,不要在onload()事件触发之前调用),因为它要创建一个隐藏的div来容纳消息。
最简单的做法时在onload事件中调用DWRUtil.useLoadingMessage,像这样: &head& &script& function init() { DWRUtil.useLoadingMessage(); } &/script& ... &/head& &body onload="init();"& ...
可能有些情况下你是不能容易的编辑header和body标签(如果你在使用CMS,这很正常),在这样的情况下你可以这样做: &script& function init() { DWRUtil.useLoadingMessage(); } if (window.addEventListener) { window.addEventListener("load", init, false); } else if (window.attachEvent) { window.attachEvent("onload",
init); } else { window.onload = } &/script&
下面这些是这个函数的代码,它对于你要实现自己的加载消息很有用。这个函数的主要内容是动态创建一个div(id是disabledZone)来容纳消息。重要的代码是当远程调用时使它显示和隐藏: DWREngine.setPreHook(function() { $('disabledZone').style.visibility = 'visible'; }); DWREngine.setPostHook(function() { $('disabledZone').style.visibility = 'hidden';
}); This is fairly simple and makes it quite easy to implement your own "loading" message.
function useLoadingImage(imageSrc) { var loadingI if (imageSrc) loadingImage = imageS else loadingImage = "ajax-loader.gif"; DWREngine.setPreHook(function() { var disabledImageZone = $('disabledImageZone'); if (!disabledImageZone) { disabledImageZone
= document.createElement('div'); disabledImageZone.setAttribute('id', 'disabledImageZone'); disabledImageZone.style.position = "absolute"; disabledImageZone.style.zIndex = "1000"; disabledImageZone.style.left = "0px"; disabledImageZone.style.top = "0px"; disabledImageZone.style.width
= "100%"; disabledImageZone.style.height = "100%"; var imageZone = document.createElement('img'); imageZone.setAttribute('id','imageZone'); imageZone.setAttribute('src',imageSrc); imageZone.style.position = "absolute"; imageZone.style.top = "0px"; imageZone.style.right
= "0px"; disabledImageZone.appendChild(imageZone); document.body.appendChild(disabledImageZone); } else { $('imageZone').src = imageS disabledImageZone.style.visibility = 'visible'; } }); DWREngine.setPostHook(function() { $('disabledImageZone').style.visibility
= 'hidden'; }); }
然后你就可以这样使用:useLoadingImage("images/loader.gif");
7.13 Submission box
h1 非util.js中的功能 这里有一些功能不适合加入到DWRUtil中。它们在解决一下特殊问题是很有用,但是他们还不够通用以适用任何场合。
修补浏览器事件 如果你创建了一个DOM元素,然后用addAttribute在这个元素上创建了一个事件,那么他们不能被正常的触发。你可以使用下面的脚本来遍历一个DOM树,并重新为他们绑定事件,这样他们就能正常的触发了。 把'click'改成你希望的事件。 DWREngine._fixExplorerEvents = function(obj) { for (var i = 0; i & obj.childNodes. i++) { var childObj = obj.childNodes [i];
if (childObj.nodeValue == null) { var onclickHandler = childObj.getAttribute('onclick'); if (onclickHandler != null) { childObj.removeAttribute('onclick'); // If using prototype: // Event.observe(childObj, 'click', new Function(onclickHandler)); // Otherwise
(but watch out for memory leaks): if (element.attachEvent) { element.attachEvent("onclick", onclickHandler); } else { element.addEventListener("click", onclickHandler, useCapture); } } DWREngine._fixExplorerEvents(childObj); } }
我们很谨慎的对待DWR的安全问题,并且认为有必要解释一下避免错误要做的事情。 首先DWR让你明确哪些是被远程调用的,是如何被远程调用。原则就是DWR必须调用那些你明确允许的代码。 dwr.xml要求你为每一个远程类定义一个'create'项。你还可以通过指定include和exclude元素来更精确的控制远程调用Bean中可以被调用的方法。 除此之外如果你希望允许DWR在转换你的JavaBean到Javascript或者从Javascript转换到JavaBean时有一定的许可限制,同样可以精确控制哪些Bean的属性可以被转换。
一个很明显但又必须指出的 – 不要在生产环境中打开test/debug模式控制台。如何打开或关闭debug控制台在配置web.xml部分可以找到详细描述。
审查 - DWR带来的最大好处
很值得对比一下DWR和Servlet、JSP或周围的其他web框架。 如果你要审查基于DWR的功能,那是非常简单的。看看dwr.xml你就能得到一个哪些方法被暴露到外面的描述了。你也可以俯视全局用DWR可以访问哪些资源。 但是要在其他系统里做这件事可不是这么容易。如果是Servlet你需要检查WEB-INF/web.xml文件,然后检查写在Servlet中的request.getParameter(...)。如果是Struts和其他Framework你需要检查配置文件,然后顺着流程检查代码,看请求信息出了什么问题。
DWR允许你通过两种基于J2EE的机制来进行访问控制。首先你可以基于J2EE角色定义DWR的访问。其次你可以在DWR里面定义访问方法的角色。
DWR不允许你定义任何内部类的create和convert。这样设计是为了不出现意外的攻击来操作DWR的核心文件以提升访问权限。
有什么机会可以让攻击者窥视你的系统呢?使用DWR你攻击者可以使服务器创建任何你在dwr.xml中指定的Java对象的实例。并且(如果你用BeanConverter)Java类的任何方法、以及方法任何参数都是可见的。这些类的任何一个属性都有可能是攻击者需要的。 如果你知道DWR是怎么工作的,这些都是很显而易见的结论,但是往往粗心会造成问题。如果你创建了一个有appendStringToFile()方法的FileBean的类,而且用DWR把它暴露出去,那么你就给了攻击者一个机会来填满你的文件系统。
你必须时刻注意用了DWR以后,有没有给攻击者什么机会。 一般来说这样的情景让人感觉使用DWR是有风险的,但是这样的问题在所有的传统web架构中都存在,只是在那些架构中这些不明显,所以就很难被修复。
保证更加安全
这已经很安全了,那么你还能做什么来保证更加安全了?首先记住上面这些关于审查的内容,当web应用的其他地方不安全时,即使它看上去很安全,过多的关注DWR是很愚蠢的。如果DWR让人感觉恐惧,那是因为它的问题都在明处。所以第一步是多检查几遍传统架构的问题。 你可以通过把可远程访问的类放到不同的包里,并且使用代理来防止DWR访问机制出问题。如果你愿意还可以再次检查基于角色的安全控制。这些内容只是在检查DWR已经为你做的事情。 比多检查几次更好的方法是检查DWR的源码,保证它是在正确的工作。这些代码已经被很多人检查过了,但多双眼睛总是有好处的。
DWR可以整合Acegi security framework。更多的信息见整合DWR和Acegi.
喜欢该文的人也喜欢

我要回帖

更多关于 java可变参数传入数组 的文章

 

随机推荐