关于DWR与Servlet、安全

本文介绍了如何将DWR与Spring框架相结合,实现远程服务调用,并通过Spring管理的Bean来增强安全性,包括身份验证和权限控制等功能。文章还详细说明了如何在服务中使用自动注入的Servlet上下文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   使用DWR做Remote,完全绕过传统的MVC框架,如Struts、Webwork,单用一个DWRServlet来做控制器。DWR向客户端 暴露了服务端的服务接口,很有可能有没有任何限制的情况下被客户端调用所暴露的接口。如果使用传统的MVC框架,可以很方便地解决很多问题诸如身份验证、 权限控制等。而DWR提供的功能是给客户端暴露服务接口。上面所涉及的问题却少有牵涉。不过,解决方案还是有的。其中之一就是使用AOP,自已实现一些拦 截功能,例如结合Spring,使用DWR的Spring整合功能,给客户端提供一个Spring的Bean,而这个Bean是经过代理的 (Proxy)。实际上已经保证了身份认证等动作完成了。而我们要多做的是,写一些Spring的Bean来作拦截器。再在原有的服务上再加上一些 AOP。当然,DWR对于安全的还是提供了些设施的,基于J2EE的安全策略之上。

 

    很多时候,在做身份验证及授权的时候可能会用到应用的环境,如ServletContext,Session等。那么在DWR中的服务或拦截器需要用到Session这些东西的时候,获取是一件很简单的事。通常有两个办法

 

    一、使用DWR的API。其实是一个静态的方法。

    二、让DWR自已注入需要的元素,这里讲的元素仅限于:

 

        HttpServletRequest
        HttpServletResponse
        HttpSession
        ServletContext
        ServletConfig

 

    做法是在服务里定义方法的时候,把以上的元素作为参数。在方法体内直接使用即可。而不必担心它的来源,来源是DWR会自已根据参数的类型注入。在客户端调 用的时候不需要提供这个参数。ServletContext之类的东西作为ThreadLocal的变量保存起来的。简单的示例:

 

1、服务代码。

package aa;
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="aa.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),第二个参数表明自动注入,客户只需要提供一个名字参数取值即可。

 

4、测试页面。
<%@ page language="java"  contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<html>
  <head> 
    <title>My JSP 'MyJsp.jsp' starting page</title>
    <%@ include file='/pages/includejsfile.jsp'%>
    <script type='text/javascript' src='<%=path%>/dwr/interface/store.js'></script>
  <script type="text/javascript">
     function aa(){
      var value = Ext.get('text').getValue();
      if(value==null || value==''){
        alert("aa");
      }else{
         DWREngine.setAsync(false);
       store.setAttribute('name',value);
       var v = store.getAttribute('name');
       alert(v);
       DWREngine.setAsync(true);
      }
     }
    </script>
  </head>
  <body>
   <input type='text' name='text' id='text'/><br>
    <input type='button' value='提交' id='aa'  onclick='aa();'/><br>
  </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值