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

Spring AOP 在DWR安全上的应用

阅读更多
上一篇文章里提到了可以让 DWR自动往Service里面注入一个与Servlet相关的对象,作为参数。只是这样,要每个Service都加上这样的一个参数,奇丑无比!想了 想,决定就让DWR污染一下,Service保留原样。只是增加一个MethodBeforeAdvice(正是它让DWR的API污染了一下。),来对 Service的方法进行拦截,可以在Service的调用之前对操作进行所谓的身份验证,授权之类的操作。完整的拦截模块几个类文件加个Spring配 置文件搞定。

     实现拦截功能的类有:

    一、MainInteceptor,主拦截器,所以DWR的远程调用都会被拦截,当然, 调用是细到方法级的,可配置的,该类实现了Spring AOP的MethodBeforeAdvice接口,该类有一个集合成员变量,成员为IInteceptor。

    二、IInteceptor,是一个接口,仅有一个execute(AopContext context)函数。该接口是拦截器(与前面的主拦截器不同,本接口定义的拦截器是可以由用户去实现,并且可以有多个)。实现接口只需要实现方法。这些 拦截器会被主拦截器回调。 比如要实现一个身份验证的拦截,SecuityInteceptor,在配置文件中把这个拦截器设置为主拦截器的属性即可获得回调。

     三、AopContext,Aop上下文。在主拦截器调用IInteceptor的对象时,把这个上下文对象作为参数来调用子拦截器。从该上下文可获得一系列信息,如HttpSession,HttpRequest等。甚至你可以自已设置属性。 

      下面看一些代码片断:
MainInteceptor:

 private List<IInterceptor> interceptors;//定义一系列的子拦截器

public void setInterceptors(List<IInterceptor> interceptors) {
        this.interceptors = interceptors;
    }

在before(Method method, Object[] params, Object target)方法里:

        WebContext ctx = WebContextFactory.get();//唯一被DWR污染的地方
        HttpSession session = ctx.getSession();
        AopContext context = new AopContext();        context.setSession(session);
        for(Iterator it = interceptors.iterator(); it.hasNext();){
            IInterceptor interceptor = (IInterceptor) it.next();
            interceptor.execute(context);
        }

 IInterceptor:

 public interface IInterceptor {
    public void execute(AopContext context);
}

AopContext就不必贴出来了, 随自已定义些什么属性,不过就内置了一个Map,用来保存数据罢了。

下面来看看配置文件:

 <beans>

    <!--将要暴露给DWR的Service-->
     <bean id="bookManager" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
      <value>net.jf.ajax.business.BookManager</value>
    </property>
    <property name="target">
      <ref local="bookManagerImpl"/>
    </property>
    <property name="interceptorNames">
      <list>
        <value>dwrAdvisor</value>
      </list>
    </property>
  </bean>

  <bean id="bookManagerImpl" class="net.jf.ajax.business.impl.BookManagerImpl"/>
<!--装配器?如果看不懂,先看看Spring的Aop吧 :P-->
  <bean id="dwrAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
    <property name="advice">
      <ref local="dwrInterceptor"/>
    </property>
    <property name="patterns">
        <list>
            <value>.*.*</value>
          </list>
    </property>
  </bean>


<!--主拦截器,给它设置子拦截器-->
  <bean id="dwrInterceptor" class="net.jf.ajax.iterceptor.MainInterceptor">
      <property name="interceptors">
          <list>
              <ref bean="test"/>
          </list>
      </property>
  </bean>
  <!--其中一个子拦截器的实现-->
  <bean id="test" class="net.jf.ajax.iterceptor.TestInterceptor"/>
</beans>

就 这样,在配置DWR的配置文件时,配置<creator>时使用Spring的Creator就可以直接使用上面的Service了。当 DWR远程请求时,在配置范围内的方法的调用都会被主拦截器拦截,并且遍历、执行所有子拦截器。原有的Service不需要改动,只需要多加一个 Spring的配置文件,将原有的Service再加一层Aop的轻纱。

这是一种实现方法。如果有别的方法让DWR更安全、有效,请一定告知。:)

分享到:
评论
1 楼 admes2008 2008-04-14  
[/flash]

相关推荐

    spring2 整合 Dwr(把DWR的配置写到Spring的配置文件)

    Direct Web Remoting (DWR) 是一个开源的JavaScript库,它允许在浏览器和服务器之间进行实时、安全的双向通信,使得Web应用程序能够拥有类似桌面应用的交互性。Spring框架是一个广泛使用的Java企业级应用开发框架,...

    spring+dwr.rar_dwr_dwr SPRING_spring dwr

    在IT领域,Spring框架和Direct Web Remoting (DWR)是两种重要的技术,它们在构建分布式Web应用程序中发挥着关键作用。本篇文章将详细讲解如何利用Spring与DWR结合,实现一个基本的功能:判断用户名是否已经存在于...

    Spring+Dwr整合的项目(源码)

    通过这个项目,开发者可以深入理解Spring和DWR的整合机制,提升在Web开发中的实战能力,尤其是对于需要实时交互的应用场景,DWR的使用能极大地提升用户体验。同时,注解方式的整合也展示了现代化开发的趋势,即简化...

    spring3+dwr3实现聊天功能

    首先,Spring3是一个全面的Java企业级应用开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等核心功能,能够简化开发过程并提高代码的可测试性和可维护性。在聊天应用中,Spring可以处理...

    DWR与SPRING,DWR与STRUTS2的整合

    4. **安全性**:整合DWR和Spring可以利用Spring的安全框架,对远程方法调用进行权限控制,增强应用的安全性。 **DWR与Struts2的整合**包括: 1. **Action与DWR交互**:Struts2的Action类可以调用DWR生成的...

    dwr与spring整合

    Spring则是一个广泛使用的Java企业级应用开发框架,提供了依赖注入、AOP(面向切面编程)以及各种服务管理等功能。将DWR与Spring整合,可以利用DWR的异步通信能力,结合Spring的强大管理功能,构建高效、灵活的Web...

    DWR示例与spring集成

    2. **利用Spring管理DWR的bean**:DWR中的Java对象可以通过Spring的依赖注入来管理,这样可以方便地利用Spring的事务管理、AOP等功能。 3. **Spring的Bean到DWR**:通过`@RemoteProxy`注解,我们可以将Spring的Bean...

    dwr2.0 spring 3.0 整合示例

    Direct Web Remoting (DWR) 是一个开源的Java库,允许Web应用程序在浏览器和服务器之间进行实时的、安全的通信,而无需使用插件。DWR 2.0 版本是在DWR早期版本的基础上发展起来的,它提供了一系列增强功能,包括更好...

    DWR与SPRING 集成

    DWR允许在浏览器和服务器之间进行实时、异步的数据交换,而Spring是Java企业级应用的全面解决方案,包括依赖注入、面向切面编程以及丰富的MVC框架。下面将详细讨论这两个框架的集成过程以及相关知识点。 1. **DWR...

    struts2+spring+hibernate+dwr

    Struts2、Spring、Hibernate和DWR是Java Web开发中常用的四大框架,它们各自负责不同的功能,协同工作能构建出高效、灵活的企业级应用。在这个小实例中,开发者结合这四个框架来展示了一个完整的后端架构。 Struts2...

    DWR+SPRING 例子+DWR中文教材

    在这个"DWR+SPRING 例子"中,我们可以学习到如何将DWR与Spring框架整合,利用DWR的强大功能增强Spring应用的前端交互性。DWR与Spring的结合使得业务逻辑可以在服务器端处理,而用户界面的更新则由DWR直接处理,避免...

    Spring2_DWR2_Login

    Spring 和 DWR (Direct Web Remoting) 是两个在 Web 应用开发中广泛使用的框架。Spring 是一个强大的 Java 框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及其他企业级功能。DWR 则是一个...

    dwr+spring 注解方式

    DWR (Direct Web Remoting) 是一个开源Java库,它允许在浏览器和服务器之间进行实时、双向通信,使得JavaScript可以直接调用服务器端的Java方法,实现了富客户端应用。Spring框架则是一个广泛使用的全面的企业级应用...

    Spring与DWR集成

    - **配置DWR Context**: 在Spring应用上下文中创建DWR的`Context` bean,设置其路径和配置文件位置。 ```xml &lt;bean id="dwrContext" class="org.directwebremoting.spring.DwrContextFactoryBean"&gt; ...

    spring整合dwr

    在整合Spring和Direct Web Remoting (DWR)框架时,主要目的是实现在Web应用程序中创建一个可交互的、实时的用户界面,通过Ajax技术在客户端和服务器之间进行数据交换。以下将详细介绍整合过程中的关键步骤。 1. **...

    spring与dwr的整合

    Spring提供了强大的依赖注入、事务管理以及AOP(面向切面编程)等功能,而DWR则允许在浏览器端直接调用服务器端的Java方法,实现页面的实时更新。将两者整合可以提升Web应用的交互性和用户体验。 **Spring框架** ...

    spring整合dwr反推技术

    通过上述步骤,我们就可以成功地在Spring框架下整合DWR实现一个在线聊天应用。用户可以在浏览器中直接通过JavaScript与服务器进行实时通信,极大地提升了用户体验。需要注意的是,虽然DWR提供了强大的功能,但在大型...

    OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)

    Spring2是企业级应用的全面解决方案,它包含了依赖注入(DI)、面向切面编程(AOP)、事务管理等功能。Spring2的IoC容器负责管理应用对象及其相互依赖关系,使得代码更加松散耦合。同时,Spring还提供了对其他框架的...

    integrating Spring and DWR

    3. **Spring MVC集成**: 如果你的应用使用Spring MVC,可以通过Spring的Controller方法返回DWR可调用的Java对象,然后在客户端通过DWR调用这些方法。这通常涉及到配置Spring的DispatcherServlet和DWR的Servlet。 4....

    spring+dwr无刷新聊天室

    2. **AOP(面向切面编程)**:Spring的AOP支持允许在关键操作点(如事务管理)上插入代码,使得业务逻辑与系统服务分离。 3. **MVC(模型-视图-控制器)**:Spring MVC是Spring框架的一部分,用于构建Web应用程序的...

Global site tag (gtag.js) - Google Analytics