本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7593605
建立时间:2006年5月29日




[Spring]关于DWR与Servlet、安全
软件技术,  电脑与网络

lhwork 发表于 2006/6/27 11:20:04

使用DWR做Remote,完全绕过传统的MVC框架,如Struts、Webwork,单用一个DWRServlet来做控制器。DWR向客户端 暴露了服务端的服务接口,很有可能有没有任何限制的情况下被客户端调用所暴露的接口。如果使用传统的MVC框架,可以很方便地解决很多问题诸如身份验证、 权限控制等。而DWR提供的功能是给客户端暴露服务接口。上面所涉及的问题却少有牵涉。不过,解决方案还是有的。其中之一就是使用AOP,自已实现一些拦 截功能,例如结合Spring,使用DWR的Spring整合功能,给客户端提供一个Spring的Bean,而这个Bean是经过代理的 (Proxy)。实际上已经保证了身份认证等动作完成了。而我们要多做的是,写一些Spring的Bean来作拦截器。再在原有的服务上再加上一些 AOP。当然,DWR对于安全的还是提供了些设施的,基于J2EE的安全策略之上。感觉不是十分良好,所以没用,也没深入研究。:P         很多时候,在做身份验证及授权的时候可能会用到应用的环境,如ServletContext,Session等。那么在DWR中的服务或拦截器需要用到Session这些东西的时候,获取是一件很简单的事。通常有两个办法        一、使用DWR的API。其实是一个静态的方法,极其不推荐。所以示例也就免了。        二、让DWR自已注入需要的元素,这里讲的元素仅限于: HttpServletRequestHttpServletResponseHttpSessionServletContextServletConfig         做法是在服务里定义方法的时候,把以上的元素作为参数。在方法体内直接使用即可。而不必担心它的来源,来源是DWR会自已根据参数的类型注入。在客户端调 用的时候不需要提供这个参数。ServletContext之类的东西作为ThreadLocal的变量保存起来的。简单的示例。 1、服务代码  package net.jf.ajax.session;import javax.servlet.http.HttpSession;public class Store {  public void setAttribute(String name,String value,HttpSession session){    session.setAttribute(name,value);  }  public String getAttribute(String name,HttpSession session){    return (String) session.getAttribute(name);  }} 2、spring配置文件       <beans>            <bean id="store" class="net.jf.ajax.session.Store">            </bean>        </beans> 3、dwr.xml  <dwr>  <allow>    <create creator="spring" javascript="store">        <param name="beanName" value="store"/>    </create>  </allow></dwr> 以 上的代码及配置文件可以达到目的:DWR与Spring结合,DWR直接使用Spring管理的Bean作为服务,当然,受Spring管理的Bean功 能一点都不减,复杂的如有着事务管理的Bean同样有用。 而且尽管是Spring管理的Bean,方法的参数中有Servlet相关的参数,DWR同样自动注入。          现在去调试页面看看我们暴露的接口及效果如何!在调试页面找到store的服务,点击进去,可以见到暴露的方法有两个: 500)this.width=500'>          一个是SetAttribute("","",AUTO),第三个参数表明自动注入,客户端只需要提供前两个参数即可。         一个是GetAttribute(“”,AUTO),第二个参数表明自动注入,客户只需要提供一个名字参数取值即可。         在测试页面提供的输入框中测试两个函数,SetAttribute填入name,jeff提交成功,在GetAttribute函数中填入name获得一个返回值,正是jeff。至此,尝试成功!


阅读全文(2003) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.332 second(s), page refreshed 144756666 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号