﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-枫言枫语-文章分类-Struts</title><link>http://www.blogjava.net/zpq/category/24608.html</link><description>——  by 玉澍淋枫</description><language>zh-cn</language><lastBuildDate>Mon, 13 Aug 2007 11:27:33 GMT</lastBuildDate><pubDate>Mon, 13 Aug 2007 11:27:33 GMT</pubDate><ttl>60</ttl><item><title>使用Struts Menu实现权限管理</title><link>http://www.blogjava.net/zpq/articles/134679.html</link><dc:creator>玉澍淋枫</dc:creator><author>玉澍淋枫</author><pubDate>Mon, 06 Aug 2007 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/zpq/articles/134679.html</guid><wfw:comment>http://www.blogjava.net/zpq/comments/134679.html</wfw:comment><comments>http://www.blogjava.net/zpq/articles/134679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpq/comments/commentRss/134679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpq/services/trackbacks/134679.html</trackback:ping><description><![CDATA[<font color="#666666"><font size="3">Struts Menu也是Matt
Raible的作品，我以前一直在找能够在Java里面指定实现页面上树形菜单和下拉菜单的东西，我去年找到一个JS的东西，可以从XML文件中读取结
构，我使用XSLT来生成显示的菜单，后来感觉不灵活，也没有用到项目上，2004年11月开始接触AppFuse，发现里面有个Struts
Menu，从例子看起来外观还不错，用起来，发现更不错，可以在配置文件中指定那些角色可以看到当前的链接，如果roles中没有指定的角色进入系统后，
则自动隐藏。我在去年的一个小项目用了一下，发现还行，至少不用我把逻辑嵌入到一堆JS里面。</font></font>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
因为今年上半年要对以前的一个系统进行升级，要根据用户或者角色的权限把一些菜单隐藏起来，如果使用Struts
Menu的roles的话，则角色是写死在代码里面的，就是"硬编码"(hardcode)，而且这里的角色是Application
Server上配置的，在Tomcat上配置还算简单，在WebLogic等大型的服务器程序上配置，必须使用他们提供的Console软件，否则，要自
己写好几个文件，比较繁琐，而且这些角色是在安装是就指定的，如果用户以后想添加新的角色名字，还要修改应用服务器的配置文件（不管是手工，还是代码处
理）。</font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
如果你的系统负责处理权限，如生成用户、角色，还要为角色、用户指定有操作哪些模块的哪些操作，一个系统很可能有几十个或者上百个角色（往极端情况去想，
呵呵），那么如果能够动态的控制显示哪些菜单项是我们系统中必须解决的问题，而Struts
Menu完全胜任这样的要求，具体实现可以参看Struts Menu的下载文件中的文档，需要重点看的是</font><a  href="http://demo.raibledesigns.com/struts-menu/dynamicMenu.jsp"><font size="3">http://demo.raibledesigns.com/struts-menu/dynamicMenu.jsp</font></a><font size="3">(动态构建菜单结构)和</font><a  href="http://struts-menu.sourceforge.net/security.html"><font size="3">http://struts-menu.sourceforge.net/security.html</font></a><font size="3">（这
篇文章我视而不见，以为没有用处，谢谢倦兔的提醒，^_^）。这两篇文章的用法是独立的，并不一定都要实现，如果你的菜单项是固定的，短期不会有所变动，
那么可以写死到配置文件中，然后用第二篇文章中说的那样，写一个类，实现接口PermissionsAdapter，isAllowed方法中传入菜单项
的名字，然后决定是否显示该项菜单，</font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] menus = request.getParameterValues("menuNames");</font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注释：menuNames是从数据库中读出的记录的集合（数组），你也可以用其他机构，</font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后放入使用request.setAttribute("menuNames",&nbsp;&nbsp;&nbsp;String[] 变量)&nbsp; 放入request中。</font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PermissionsAdapter permissions = new SimplePermissionsAdapter(menus);//menus是菜单名字的数组<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.getSession().setAttribute("YourAdapter", permissions);}&nbsp; //"YourAdapter"随便起的名字，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //但要和配置文件中的permissions="YourAdapter""部分的一致。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
在里面添加permissions="你的类名"(上文中是"YourAdapter），如果此处的perssions的值为
"rolesAdapter"，则Struts
Menu不会从寻找你的Adapter类了，而是直接创建一个RolesPermissionsAdapter实例，然后使用这个实例处理角色(根据配置
的rolse的角色名字判断是否显示菜单项)。其实PermissionsAdapter是RolesPermissionsAdapter类的一个具体
的实现，如果你不写自己的适配器，则Struts Menu使用自己的这个适配器处理菜单显示。</font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 后一篇文章的最后还举了一个过滤器实现上述功能的例子，你可以参考一下，这个试验并不是完全由我实现的，是由倦兔提供思路和文档的URL，我只是把思路整理一下，让其他同事实现，我把它记录下来，以免以后再看的时候忘了。^_^</font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外，我还发现Struts Menu的例子里面还有关于Tab页的实现脚本，如果我早点发现它，我就不会在上一个系统中每个JSP页面都嵌入一大堆同样的Table垃圾代码了！！！</font></font></p>
<p><font color="#666666"><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
另外，这种做法并没有完全实现控制用户操作的作用，因为用户只是不能看到某个功能的菜单链接而已，如果，他记住了有操作权限的人员操作时发出的请求的
URL，比如:http://rabbit8.blogchina.com?edit?method=delete&amp;sid=5，那么，他就可以
手工输入URL，同样可以删除、修改、查看某些他不应该看到的东西，这有些属于Web安全方面的东西了，呵呵，如果想实现更加完善的权限管理功能，还应改
在执行操作前进行用户身份和权限的验证，从而避免上述方法的攻击或者破坏。如果你对这方面的内容感兴趣，可以查看一些相关书籍，如《Web安全大曝光》、
《J2EE安全大曝光》系列，我春节期间看了这2本书，对于跨站脚本攻击还不太明白，如果哪位明白，请不吝指教，谢谢！^_^</font></font></p><img src ="http://www.blogjava.net/zpq/aggbug/134679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpq/" target="_blank">玉澍淋枫</a> 2007-08-06 13:10 <a href="http://www.blogjava.net/zpq/articles/134679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于Struts的权限实现</title><link>http://www.blogjava.net/zpq/articles/134677.html</link><dc:creator>玉澍淋枫</dc:creator><author>玉澍淋枫</author><pubDate>Mon, 06 Aug 2007 04:59:00 GMT</pubDate><guid>http://www.blogjava.net/zpq/articles/134677.html</guid><wfw:comment>http://www.blogjava.net/zpq/comments/134677.html</wfw:comment><comments>http://www.blogjava.net/zpq/articles/134677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpq/comments/commentRss/134677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpq/services/trackbacks/134677.html</trackback:ping><description><![CDATA[<table class="border" align="center" border="0" cellpadding="0" cellspacing="0" height="156" width="760">
    <tbody>
        <tr>
            <td class="tdbg" colspan="3" height="15">
            <div style="font-size: 11pt; color: #ff6600; font-family: '黑体';" align="center"><strong>基于Struts的权限实现 </strong></div>
            </td>
        </tr>
        <tr>
            <td class="tdbg" colspan="3" height="5"><br></td>
        </tr>
        <tr align="center">
            <td class="tdbg" colspan="3" height="5">作者:Javazealot(转贴)&nbsp;&nbsp;来源:justjsp.com&nbsp;&nbsp;入库时间:2004-07-11&nbsp;&nbsp;点击数:327
            <hr size="1">
            </td>
        </tr>
        <tr>
            <td class="tdbg" colspan="3" height="6"><br></td>
        </tr>
        <tr>
            <td class="tdbg" colspan="3" height="8">
            <table align="center" border="0" cellpadding="0" cellspacing="0" width="700">
                <tbody>
                    <tr>
                        <td>基于Struts的权限实现 <br>一：概念介绍 <br><br>1:)资源<br>可以使用的系统资源.比如注册用户是一种资源，修改用户信息也是一种资源.<br>资源在系统中呈现为一棵树.假如用户管理是一个节点.用户注册，用户信息<br>修改为用户管理的叶子。叶子具有不可分割性.<br><br>2:)角色<br>绑定可操作资源的集合。<br>比如系统管理员，可以使用全部资源.<br>一般用户，可以注册和修改查看自己的信息.<br>角色可以有依赖角色。也就是说现在系统中存在<br>RoleA,RoleB,RoleC ,RoleD 四种角色.<br>RoleD 倚赖RoleA<br>假设一个用户的角色是RoleD.<br>根据倚赖关系。默认有RoleA 的可使用资源.<br><br>3:)用户<br>系统中的使用者，因为角色可以倚赖，所以一个用户只有一种角色.<br><br>二：资源的分配<br>上述三个概念之间的绑定关系为用户绑定一个角色，角色绑定若干资源.<br>角色绑定资源有两种绑定，一种是绑定叶子，一种绑定节点。绑定节点有<br>两种一种只绑定节点下的叶子，一种绑定节点下所有的叶子.在系统中权<br>限的分配需要做到一个角色可以访问整个资源树中的任意节点和叶子的组合.<br><br>三：资源树的构造<br>我们使用namespace的方式去构造一棵树.根节点为空。<br>下面形如:sysytem.user.useradd,system.department.add,system.common<br>上面的可以理解为system是一个节点,并有两个子节点user,department,<br>一个叶子common<br><br>四：Struts中的资源标识<br>在Struts中一个Action的配置通常如下:<br><br>&lt;action path="/editSubscription"<br>type="org.apache.struts.webapp.example.EditSubscriptionAction"<br>attribute="subscriptionForm"<br>scope="request"<br>validate="false"&gt;<br>&lt;forward name="failure" path="/mainMenu.jsp"/&gt;<br>&lt;forward name="success" path="/subscription.jsp"/&gt;<br>&lt;/action&gt;<br><br>为了使没一个Action绑定到一个跟节点下,我们加一个选项把上面的配置修改为<br>&lt;action path="/editSubscription"<br>type="org.apache.struts.webapp.example.EditSubscriptionAction"<br>attribute="subscriptionForm"<br>scope="request"<br>rights="system.user"<br>validate="false"&gt;<br>&lt;forward name="failure" path="/mainMenu.jsp"/&gt;<br>&lt;forward name="success" path="/subscription.jsp"/&gt;<br>&lt;/action&gt;<br><br>为了在xml parse的时候可以加载上面的配置，我们需要修改一下Struts的源代码<br>修改org/apache/struts/config/ActionConfig<br>增加如下代码<br><br>protected String rights="common";<br><br>public String getRights(){<br>return this.rights; <br>}<br><br>public void setRights(String rights){<br>if (configured) {<br>throw new IllegalStateException("Configuration is frozen");<br>}<br>this.rights=rights;<br>}<br><br>假如修改成功后我们把ActionMapping 打印出来会看到相关的配置<br><br><br>五：权限分配的实现<br>1:)实现角色资源的绑定<br>在我的实现中我使用xml文件去配置如下：<br>&lt;role name="01"&gt;<br>&lt;resource-list&gt;<br>&lt;resource name="test" url="test.jsp" menu="false"/&gt;<br>&lt;resource name="user" url="user.jsp" menu="true"/&gt;<br>&lt;!--绑定绑定一个叶子--&gt;<br>&lt;/resource-list&gt;<br>&lt;node-list&gt;<br>&lt;node name="system.test" include="false"&gt;<br>&lt;!--绑定绑定一个节点如果include为true绑定所有子叶子--&gt;<br>&lt;/node-list&gt;<br>&lt;/role&gt;<br><br>2:)权限的判断<br>这一部分有很多中实现方式，一种所有的Action继承BaseAction<br>在BaseAction里面实现，并在没一个Action里面去调用判断.<br><br>另外一种交给Struts去判断<br>org.apache.struts.action.RequestProcessor<br>里面有一个processActionPerform<br>调用Action的execute去执行Action <br>我们可以修改processActionPerform让其在执行execute前先执行权限检查<br>如果是这样的话，必须修改org.apache.struts.action.Action<br>让一个方法去实现权限判断.<br><br>如果使用第二种需要修改蛮多源代码，不建议对Struts不熟悉的人使用</td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/zpq/aggbug/134677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpq/" target="_blank">玉澍淋枫</a> 2007-08-06 12:59 <a href="http://www.blogjava.net/zpq/articles/134677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于struts项目权限解决方案的探索</title><link>http://www.blogjava.net/zpq/articles/134674.html</link><dc:creator>玉澍淋枫</dc:creator><author>玉澍淋枫</author><pubDate>Mon, 06 Aug 2007 04:50:00 GMT</pubDate><guid>http://www.blogjava.net/zpq/articles/134674.html</guid><wfw:comment>http://www.blogjava.net/zpq/comments/134674.html</wfw:comment><comments>http://www.blogjava.net/zpq/articles/134674.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpq/comments/commentRss/134674.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpq/services/trackbacks/134674.html</trackback:ping><description><![CDATA[<div class="cnt">
<p>前一段时间我曾专门阅读过一些关于JAAS的资料，网上这方面的资料不多，篇篇文章都是侧重于讲述一些核心的JAAS类（不过讲的蛮不错的，呵呵。。。对于这方面的入门极好），而对于应用方面给我的感觉就像：</p>
<p>&#8220;天啊，几乎没有人用到它~！&#8221;</p>
<p>还好chinaxp论坛的源代码中涉及了这方面的应用，而且它们就是那样做的，这其中给了我不少启示。</p>
<p>目前在我参与的一个项目（正在开发）中，我采用JAAS的验证机制（其中的授权部分因为没有非常熟悉的掌握所以暂时没有采用，而暂时采用另外一种方法来解决，这种方法再接下来的部分涉及。）</p>
<p>&nbsp;</p>
<p>先说一些我以其为背景的这个项目：</p>
<p>它算是一个比较大的项目（省级高速公路路政工作平台），大的划分可以分为10个大模块26个子模块，具体分为基本信息维护、路政案件、路政审批等等大模块；权限主要是（对某一模块的维护、浏览以及打印等）</p>
<p>经过讨论我们在设计权限的时候是这样考虑的：</p>
<p>分为三个&#8220;角色&#8221;：用户、用户组、权限；</p>
<p>他们的关系为：用户属于某个用户组；权限下放到用户组。（这一切都是和&#8220;当场客户代表&#8221;共同讨论决定的。）</p>
<p>&nbsp;</p>
<p>如下表是权限的内容：</p>
<p>rightID<br>
&nbsp;rightName<br>
&nbsp;<br>
00100<br>
&nbsp;维护基本信息<br>
&nbsp;<br>
00101<br>
&nbsp;浏览基本信息<br>
&nbsp;<br>
00500<br>
&nbsp;维护路产信息<br>
&nbsp;<br>
00501<br>
&nbsp;浏览路产信息<br>
&nbsp;<br>
&#8230;&#8230;<br>
&nbsp;&#8230;&#8230;<br>
&nbsp;</p>
<p>&nbsp;</p>
<p>其中系统模块用xml配置，如：</p>
<p>&nbsp;</p>
<p>module_config.xml</p>
<p>&nbsp;</p>
<p>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;</p>
<p>&lt;module-config&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;module&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;维护基本信息&lt;/name&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;right&gt;00100&lt;/right&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/module&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;module&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;维护路产信息&lt;/name&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;right&gt;00500&lt;/right&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/module&gt;</p>
<p>&#8230;&#8230;</p>
<p>&lt;/module-config&gt;</p>
<p>(采用单例模式在容器启动的时候进行解析)</p>
<p>&nbsp;</p>
<p>把具体的权限绑定到每一个*.do请求：</p>
<p>&nbsp;</p>
<p>request_source.xml</p>
<p>&nbsp;</p>
<p>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;</p>
<p>&lt;request_source&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;request&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url&gt;useradmin.do&lt;/url&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;desc&gt;显示用户信息维护主页面&lt;/desc&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;right&gt;00100&lt;/right&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/request&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&#8230;&#8230;</p>
<p>&lt;/request_source&gt;</p>
<p>（也是在容器启动的时候解析并放到容器中）</p>
<p>&nbsp;</p>
<p>系统中权限流程控制基本上我把它分为两个步骤：</p>
<p>&nbsp;</p>
<p>1．&nbsp;&nbsp;利用filter以及JAAS来进行非法用户的过滤</p>
<p>其中所有的*.JSP也要通过*.do来引导，这样就能确保整个系统中没有权限&#8220;盲点&#8221;，也即可以保证每一个*.do都是&#8220;干净的&#8221;。</p>
<p>这其中涉及到以下几个文件，具体的代码在此不给出：</p>
<p>（1）iRoadLogin.config</p>
<p>IRoadLogin{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.ifreeway.iroad.security.DataBaseLoginModule&nbsp;required&nbsp;debug=true;</p>
<p>};</p>
<p>这个文件在创建LoginContext对象的时候根据这个文件来确定该加载哪个LoginModule对象。</p>
<p>（2）ParseRequestFilter.java<br>
对每一个请求进行非法用户的过滤。</p>
<p>（3）DataBaseLoginModule.java</p>
<p>（4）SimpleCallbackHandler.java</p>
<p>&nbsp;&nbsp;上边的几个类的介绍涉及过多的JAAS核心类的内容，建议阅读下面连接的内容：</p>
<p>&nbsp;<a  href="http://www.yesky.com/20030114/1648365.shtml">http://www.yesky.com/20030114/1648365.shtml</a>这篇文章对于你了解JAAS绝对有帮助，你也可以通过我的站点来阅读更多的JAAS资料：&nbsp;<a  href="http://plateau.sicool.com/">http://plateau.sicool.com</a></p>
<p>&nbsp;</p>
<p>2．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;在确保是合法用户（已经通过1。的过滤的用户）请求*.do的时候再来判断该用户是否拥有请求该do的权利。<br>
可以在每个action的父类BaseAction中创建一个方法来判断是否合法，如：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Boolean&nbsp;validateRight(String&nbsp;_request_do)&nbsp;throws&nbsp;ErrorRequestException{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取得user所在的组:a</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//根据_request_do,假设其为：useradmin.do</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获得其所在的组:b</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//然后根据两次组(a&nbsp;和&nbsp;b)是否是同一组来判断该请求是否合法</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//此时的a和b都是很容易在容器中获得的，不会损失效能。</p>
<p>}</p>
<p>前提：项目中的又一个公共的BaseAction，其他的action都要继承它。这一点我想使用struts开发项目的开发员都是很容易理解的。</p>
<p>如：有一个UserAdminAction.java</p>
<p>那么在这个执行它的时候首先调用validateRight(&#8220;useradmin.do&#8221;)来进行权限判断，如果返回false，那么跳转到error页。</p>
<p>&nbsp;</p>
<p>其实我上边所写出的解决方法在我现在的项目中是够用的。是谁说过：&#8220;够用为原则&#8221;？项目的权限设计这部分实在是个非常大的讨论题目，这里算是抛砖引玉，希望给你一点提示，也希望你可以给我一些更好方法的提示，</p>
</div><img src ="http://www.blogjava.net/zpq/aggbug/134674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpq/" target="_blank">玉澍淋枫</a> 2007-08-06 12:50 <a href="http://www.blogjava.net/zpq/articles/134674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>