当前位置:编程学习 > JAVA >>

Strut2 Value Stack 问题

出于安全考虑,我对URL请求做了一定的加密处理。如
XXX.action?user.username=123456 改为了 XXX.action?user.username=abcdef

我在服务器端想解密这串url,其实就是把abcdef解密为123456.

因此,我自己写了一个易做图,希望在易做图中修改value stack 中user.username的值。

现在遇到了一个很奇怪的问题。

如果action中有username这个字段,那我使用value stack 中的setValue 方法,即setValue("username","123456"),这样是没问题的。

但如果action 中有user 这个对象,user对象中有username这个字段,此时我用setValue("user.username","123456"),就会报错。

错误就是
target is null for setProerpty(null, "username",???)
Error setting expression 'user.username' with value '123456' --------------------编程问答-------------------- 它不能识别user.username的,想当然了。
那你就先setValue("username","123456")
然后再user.setUsername不行么。 --------------------编程问答-------------------- 为什么不能识别user.username呢?API上写的是setValue(String expr, Object obj)expr是EL表达式,为什么支持不了ognl表达式呢?

你的方法我不是特别看得懂。能详细解释下吗? --------------------编程问答--------------------
引用 1 楼  的回复:
它不能识别user.username的,想当然了。
那你就先setValue("username","123456")
然后再user.setUsername不行么。


为什么不能识别user.username呢?API上写的是setValue(String expr, Object obj)expr是EL表达式,为什么支持不了ognl表达式呢?

你的方法我不是特别看得懂。能详细解释下吗? --------------------编程问答-------------------- 他的意思是易做图不会解析user.username,易做图分为ACTION之前的易做图和ACTION之后的易做图,以String result = invocation.invoke();   为分界。你的需求是前一种,即在ACTION执行之前改变VALUE STACK的值,在所以模型是这样的  
ActionContext context = ActionContext.getContext();  
ValueStack vs = context.getValueStack();  
vs.set("user.username", "123456");  
String result = invocation.invoke();  
望受用 --------------------编程问答-------------------- 给User添加构造方法
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,