根据目前掌握的知识来看,Url请求中的参数,均可以通过Action的set方法被注入到Action中。
现在的问题是,Action中的一些成员变量不想被注入。
如上传文件时,存放服务器上传的路径是通过struts.xml中的param设定的,
同样,Action中也需要对应这个路径的set方法,如:public void setUploadDir(String uploadDir)
这样做的话,如果访问者通过在请求的Url增加一个uploadDir="e:\"参数,即可以将存放上传文件的路径修改,
从而可能对服务器任意路径上传文件。
由于刚接触Struts2不长时间,想问一下,可以限制通过Action中的set方法的注入吗?
问题补充:
根据目前掌握的知识来看,Url请求中的参数,均可以通过Action的set方法被注入到Action中。
现在的问题是,Action中的一些成员变量不想被注入。
如上传文件时,存放服务器上传的路径是通过struts.xml中的param设定的,
同样,Action中也需要对应这个路径的set方法,如:public void setUploadDir(String uploadDir)
这样做的话,如果访问者通过在请求的Url增加一个uploadDir="e:\"参数,即可以将存放上传文件的路径修改,
从而可能对服务器任意路径上传文件。
由于刚接触Struts2不长时间,想问一下,可以限制通过Action中的set方法的注入吗?
--------------------
象bohemia 样的回答后,struts.xml中的参数就没法注入到action中了啊。
问题补充:
这样更好点
[code="java"]
setUploadDir
[/code]
public void setUploadDir(String uploadDir)
==>
private void setUploadDir(String uploadDir)
[quote]struts.xml中的参数就没法注入到action中了啊。[/quote]
既然是系统内部,就可以通过其他途径获取这个值啊;
直接根据参数,读取到然后后台设置就可以了吧.
怎么获取,有好多方法吧?
Web.xml配置;
Servlet读取;
另外,及时你的路径,也到固定的其他配置文件; 也可以的; 没必要一定要通过Struts.
配置interceptor的excludeMethods参数
[code="java"]
setUploadDir
[/code]