搜索墙首页  编程技术  java  asp  ajax  php  c/c#/c++  数据库  oracle  mysql  db2  操作系统  windows  linux  股吧
首页 > 编程 > java > Struts
 1         
1楼  cjcoder 2008-01-25

问题是这样:
我的一个 Action 中有一个类型为 User 的属性 user,并且有方法 getUser 和 setUser。还有一个 save 方法负责把 user 保存的数据库。
在页面 userEdit.jsp 中有一系列的 user.field 输入组件。

这样用户是否可以手动写一个页面并且提交到 Action 的 save 方法,如果可以,那么用户就可以更改其他不应该让他更改的 user 了。

一般这个问题是如何解决的,如果在更新到数据库前手动写代码检测好像不是非常优雅。
还是应该把 user 属性分解,如 getId getUsername getName setName,这样可以把有些 field 设置为只读,但是工作量好像挺大。
2楼  xcly 2008-01-25

关注,你总结得很好,呵呵,还真的有这么麻烦, 我没用过struts,不知道是否可以考虑使用 model2模式的过滤器!.
3楼  waitmannee 2008-01-25

一般不要把与数据库有关的操作同时放在action中,而是单独提取出来,然后在action中调用那个方法,这样这种问题就没有了;
4楼  QuakeWang 2008-01-25

是否有权限更改是必须检查的,需要根据传入的id从数据库抓取,确保当前用户有权限对这个对象进行操作。你说的第2个关于保护field的问题,可以通过parameter filter interceptor来解决:
http://struts.apache.org/2.x/docs/parameter-filter-interceptor.html
不过我个人觉得它这个interceptor还不够简洁,应该可以通过基于model的定义文件来分离,这样就不需要写重副代码了。
5楼  差沙 2008-01-25

1.可以单独写一个dto作为传入的参数。
2.可以把传入的user手动转换成另外一个合法user。
3.可以写一个拦截器,用配置的方式控制可以传入哪些参数,这种方法可以精确到方法级别,可以写anno让拦截器来读取。
6楼  cjcoder 2008-01-25

差沙 写道
1.可以单独写一个dto作为传入的参数。
2.可以把传入的user手动转换成另外一个合法user。
3.可以写一个拦截器,用配置的方式控制可以传入哪些参数,这种方法可以精确到方法级别,可以写anno让拦截器来读取。


2 ~= 如果在更新到数据库前手动写代码检测好像不是非常优雅。
1 ~= 还是应该把 user 属性分解,如 getId getUsername getName setName,这样可以把有些 field 设置为只读,但是工作量好像挺大。

方法 3 不错,能否有个简单的例子代码供参考一下,我刚开始使用 struts2,不是很熟悉。以前用 struts1 的时候都手动getParameter() 也就不存在这个问题。
 1         
您的发言将按有关规定都会存档,您须为所发表后果负责,请您遵纪守法并注意语言文明。
标题:请教关于struts2的一个安全性考虑
热门关注
标题回复点击
上个星期去腾讯面试一位主考官出的动脑题,当时被难住了168599
有没人和我一样厌倦了MVC框架各自定义的那些JSP标记库呢92467
Tapestry会成为Web表示层框架的主流解决方案吗?89380
JavaWeb层的下一个王者是谁?94372
艰难的抉择:SpringMVCORStruts2108326
SSH2:Struts2+Spring+Hibernate的登录25315
帮Springsecurity一个忙:为Struts2写个Plugin对Action进行权限控制59274
在Struts2中应用FreeMarker还是Velocity好?28261
LightURL??打造零配置的Struts2开发方式68256
Struts2返回XML7225
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源