2009-05-27 91 views
1

DWR后数据我有一个方法签名DWR动作如下:访问在Spring拦截

String joinGroup(String groupId, String groupName); 

这是通过DWR AJAX请求调用,并正常工作。

但是,我试图编写一个Spring拦截器(很像ServletFilter)在DWR操作被调用之前做一些验证工作。
拦截器被正确调用,但我需要访问拦截器中的groupId和groupName数据。

请求参数映射为空,我已经在调试器中完成了请求属性的整个列表,并且我无法在任何地方看到数据。
请求的postData也为空。

使用firebug我可以看到数据正在传递给服务器(当joinGroup方法最终被调用时,它就在那里)。
我似乎无法在拦截器中访问它。

我有什么办法可以访问它吗?

回答

2

使用org.directwebremoting.AjaxFilter

的AjaxFilter的doFilter方法由DWR Ajax请求上,该滤波器被配置针对一种方法制成每次调用。传入此方法的AjaxFilterChain允许筛选器将方法详细信息传递给链中的下一个实体。

典型地,该方法将执行以下操作:

  1. 检查请求
  2. 任选改变的方法中,对象或参数
  3. 要么使用AjaxFilterChain调用下一个实体在链中或决定采取一些其他行动,而不是
  4. 选择地修改返回给用户
  5. 价值采取其他一些行动(例如日志记录)
1

我会假设你使用的是MethodInterceptor这是被调用(意思是你的配置是正确的)只有上面的方法。

... 
@Override 
public Object invoke(MethodInvocation inv) throws Thorwable { 
    Object[] args = inv.getArguments(); 
    String groupId = args[0]; 
    String groupName = args[1]; 
    .... if user has access call inv.proceed, else throw AccessDeniedException 
} 

Spring框架的MethodInterceptor几乎是完全一样的MethodSecurityInterceptor在春季安全。

+0

你好,我不使用的Acegi我害怕。 无论如何,我已经想出了一个替代解决方案,我将很快发布。 – 2009-05-27 19:23:27

+0

啊,当我看到“身份验证”这个词时,我想你是在使用Spring Security或Acegi。 – Gandalf 2009-05-27 19:35:21