`
我想我是海
  • 浏览: 212263 次
社区版块
存档分类
最新评论

关于DWR与Servlet、安全

阅读更多
使用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自已注入需要的元素,这里讲的元素仅限于:

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • ServletContext
  • ServletConfig

        做法是在服务里定义方法的时候,把以上的元素作为参数。在方法体内直接使用即可。而不必担心它的来源,来源是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的服务,点击进去,可以见到暴露的方法有两个:

         一个是SetAttribute("","",AUTO),第三个参数表明自动注入,客户端只需要提供前两个参数即可。

        一个是GetAttribute(“”,AUTO),第二个参数表明自动注入,客户只需要提供一个名字参数取值即可。

        在测试页面提供的输入框中测试两个函数,SetAttribute填入name,jeff提交成功,在GetAttribute函数中填入name获得一个返回值,正是jeff。至此,尝试成功!
分享到:
评论
1 楼 accphc 2011-03-19  
一、使用DWR的API。其实是一个静态的方法,极其不推荐。所以示例也就免了。
为什么不推荐呢?!

相关推荐

    DWR.xml配置文件说明书(含源码)

    在init部分的作用是告诉DWR一些类实例和关于这些类怎样运行的信息.实际上并不会使用.这有点向java中的import语句,多数类在使用之前需要引入,但引入了类并不意味着这些在使用,每个creator和converter需要有个id属性来...

    DWR中文文档.pdf

    34 4.2.4 使用Spring配置DWR 35 4.3 DWR与JSF 36 4.3.1 JSF Creator 36 4.3.2 Servlet Filter 36 4.4 DWR与Struts 37 4.4.1 Struts creator 37 4.4.2 开始顺序 37 4.5 DWR与...

    dwr框架包含帮助文档

    dwr它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容. DWR采取了一个类似AJAX的...

    DWR(Direct Web Remoting)框架jar包.rar

    DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用行在WEB服务器上的JAVA函数,就像它就在浏览器...

    Jetty中文手册

    DWR MyFaces JSF Reference Implementation Jakarta Slide GWT Jetspeed2 ICEfaces 其他 Atomikos Transaction Manager Java Open Transaction Manager (JOTM) Bitronix Transaction Manager ActiveMQ Binding JAX-...

    js脚本中执行java后台代码方法解析

    方式一:直接在js代码里调用sql语句,原则上不能使用,因为这将sql直接暴露在客户端,安全性极差。 方式二:在js里运用ajax技术,调用后台方法执行sql语句。 方式三:运用dwr框架,其实是对ajax技术进行了封装。 一...

    达内java培训目录

    Spring技术 Spring Ioc基础、Ioc注入技巧、对象高级装配(自动装配、模板装配、组件扫描特性、FactoryBean、对象生命周期)、Spring AOP原理、AspectJ、Spring JDBC支持、Spring事务及安全管理;Spring整合Hibernate...

    9个优秀毕业设计+源码合集.zip

    1、项目管理系统,ssh+jquery+servlet+json+dwr+ajax 2、网上银行系统+源码-java, 3、机票订购网站系统+源码-java, 4、五子棋客户端+源码-java, 5、在线购物系统+源码-java; 6、图书管理系统毕业设计+源码-java...

    BAMS-JAVA快速开发框架 2.5

    只要java基础扎实,再稍懂一点js即可,真的是为java开发人员量身定制的一套框架啊),框架以Spring Framework为核心、Jsp+Dwr作为模型视图控制器、Hibernate作为数据库操作层。BAMS 2.5 更新日志:2015-07-091、修复...

    Spring攻略(第二版 中文高清版).part2

    6.5 将Spring与DWR集成 232 6.5.1 问题 232 6.5.2 解决方案 232 6.5.3 工作原理 233 6.6 小结 236 第7章 Spring Web Flow 238 7.1 用Spring Web Flow管理简单的UI流程 238 7.1.1 问题 238 7.1.2 ...

    Spring攻略(第二版 中文高清版).part1

    6.5 将Spring与DWR集成 232 6.5.1 问题 232 6.5.2 解决方案 232 6.5.3 工作原理 233 6.6 小结 236 第7章 Spring Web Flow 238 7.1 用Spring Web Flow管理简单的UI流程 238 7.1.1 问题 238 7.1.2 ...

Global site tag (gtag.js) - Google Analytics