在Action中查询出SQL SERVER表的数据,返回一个list。怎么在JSP页面中使用Struts标签,显示出表中的内容?

 我来答
cppcp16
2011-01-10 · TA获得超过3145个赞
知道小有建树答主
回答量:1735
采纳率:0%
帮助的人:265万
展开全部
给你截取一小段,全文到上面网址自己看吧。
Struts2安全缺陷
可以看到struts2在数据流向方面,有两个重点,一个是进入(in),一个是输出(out)。而我在做漏洞挖掘的思路,也是跟着这个数据的流 程,开始分析的,下面我们就开始让数据进入。
Action属性默认值可以被覆盖缺陷:
在日常的java项目中,我们经常会遇到保存一个新的对象(比如注册一个用户),然后给这个对象赋予一些用户提交上来的属性值,在这里,只需要定义 一个对象类:
public class User {

private Long id=0l;

private String name;

private String pass;

private Integer type=1;

。。。下面的get和set方法代码略

}
定义后,在action中,添加一个属性
User reguser;
用户注册的页面代码如下:
<form XXXXXXX>

<input name="reguser.name">
当用户提交这个form到action中后,struts2会负责自动映射reguser.name的值到reguser的相关属性(name) 中,所以在execute这个方法中,就可以使用reguser.getName()拿到用户提交的reguser.name的值。所以我们下面的代码就 很简单了:
public String execute(){

add(user);
add方法,更简单了,因为我们项目中集成了hibernate,这个框架自动映射user类中的各个属性,自动组成insert语句。我们只要在 add中调用session.save(user);就可以保存用户到数据库中。
前文提到那么多“简单”两个字,难道这些过程都是安全的而他给我们仅仅带来了方便么?
struts2只负责映射所有对象,他提供了form验证,也只能验证form中属性值的内容,比如email格式等,并不能约束用户提交其他属性 上来,于是这就变成了十分危险的功能。
当User中有个属性type,代表User是否管理员时(1为普通用户,2为管理员),麻烦来了,攻击者在原来的注册表单中,新加入一个 input,叫做
<input name="reguser.type">
然后输入值是2,把这个值一起交给action。在这个流程中,这个值,当然也会被自动带到数据库中,向下处理的逻辑中,这个用户,就已经变成管理 员了。
当你看到了一个struts2或者webwork的应用,可以尝试使用属性攻击,修改当前表单,里面有所有你猜测到的属性,一并提交上来,就可能会 影响整个逻辑,达到攻击目的。文中仅仅是一个例子,事实上,在数据传递的过程中,可以任意覆盖数据的默认值,本来就是一个危险的缺陷,而struts2和 webwork这两个框架仅仅看到了它带来的好处,忽略了这方面基于安全性的考虑,仅仅关注了用户提交数据的正确性。对比在没有struts2这个功能的 时候,我们却需要在action中一个一个的把需要的变量,从用户提交的request中解出来,一个一个处理,不可能出现这种安全问题。现在它包装了这 个过程,自以为很方面,却出了严重问题。
Action中的方法被暴力猜解缺陷
前文提到,有一种方法可以让用户访问action时,不访问默认的execute方法,而是直接访问其他action中的方法,条件是在 action中,写一个public的方法。开发人员如果需要做一个登陆后,展示所有用户列表的功能,而他的一个“解耦合”的开发习惯,将在这里导致安全 缺陷。
定义一个如下的action
public class Userlogin extends ActionSupport{

private String uname="";

private String upwd;

private List list;

//getter and setter 方法略

public String login(){

if(uname!=null&&upwd!=null&&uname.equals("kxlzx")&&upwd.equals("pass"))

{//if login success

return list();

}

return false;

}

public String list(){

list.add("kxlzx");list.add("kxlzx1");list.add("kxlzx2");list.add("kxlzx3");

return "list";

}

}
Userlogin中,因为list这个功能(显示所有用户列表),其实是一个通用的功能,很容易被其他地方调用,所以开发人员把它单独写成了一个 方法。
当用户登陆的时候,打开
!login.action
来到了用户的登陆页面,可以看到,只有用户输入正确的用户名和密码,才能最终调用list()方法,显示结果。

但是struts2把所有public的方法都暴露了出去,导致现在用户输入了
!list.action
用户访问这个链接后,struts2调用list方法,然后返回结果给用户,所以没有登陆,就显示了所有用户信息,
直接绕过了login中的登陆验证。

在没有struts2的时候,我们要在servlet的doget或者dopost方法中,写if判断等代码,才能让用户调用其他servlet中 的方法,现在看来其实这也是一种保护措施。而现在struts2为了方便开发,把所有的public方法统一映射了出去,导致开发把一个经常使用的功能, 习惯写成一个public的方法,现在居然成了严重漏洞。
struts2的action属性设计缺陷
再回头看看我们在action中的属性定义,你会发现,现在他们都成了漏洞,因为struts2规定属性的get和set方法,都必须是 public的。
那么我们定义了
private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}
这段代码的时候,实际上,是写了两个public的方法。
那这两个表面上没有任何实质含义的方法,会有什么安全隐患呢?
这需要和前文联系起来,前文提到,我们在struts.xml文件中,定义如下:
<action name="user">

<result name="success">user/userlist.jsp</result>

<result name="addUser">user/addUser.jsp</result>

<result name="added">user/added.jsp</result>

<result name="false">user/false.jsp</result>

</action>
这段代码含义是,UserAction中,任何一个方法执行后,如果返回的是success这个字符串, 就会把user/userlist.jsp返回给用户。
如果返回是addUser,就会把user/addUser.jsp返回给用户。
现在UserAction是管理用户的页面,在我们的系统中,有普通管理员和超级管理员,他们的区别是普通管理员可以查看用户,但是不能添加一个用户。
所以,我们在UserAction中,写了
public String addUser(){

if(true){ //事实上这里是个超级管理员的判断,我偷懒了。

return "false";

}
一滴冰雨
2011-01-10
知道答主
回答量:27
采纳率:0%
帮助的人:7.5万
展开全部
把要展示的信息定义为一个存储对象(DTO对象)把DTO放入List 。在Action中 request.setAttribute("list",List);
在jsp中就可以用struts标签接收了。先用<logic:iterator> 循环 再用<bean:write > 把数据打印了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伏松桖0k
推荐于2016-08-03 · TA获得超过1826个赞
知道小有建树答主
回答量:1410
采纳率:100%
帮助的人:696万
展开全部
你在action中如果有 public String list()throws Exception{
UserDaoImp ud=new UserDaoImp();
List<User> list=ud.getAll();
request.put("list",list);
return "list";
}这种的话,在页面中可以这样写,
<s:iterator value="#request.list">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="name"/></td>
<td><s:property value="password"/></td>
</tr>
</s:iterator>
就可以了.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式