Username: Password:

SpringAOP在DWR安全上的应用
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00


  在上一篇文章里提到了能够让 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 interceptors;//定义一系列的子拦截器

  

public void setInterceptors(List 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,用来保存数据罢了。

  

下面来看看配置文档:

  



  



  

  

   net.jf.ajax.business.BookManager

  


  

  

  


  

  

   dwrAdvisor

  


  


  


  

  

  

  

  

  


  

  

   .*.*

  


  


  


  



  

  

  

  

  


  


  


  

  

  

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

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

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅