在Spring Interceptor中访问DWR post数据

时间:2009-05-27 08:45:30

标签: java ajax spring dwr

我有一个带有方法签名的DWR操作,如下所示:

String joinGroup(String groupId, String groupName);

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

但是,我正在尝试编写一个Spring拦截器(与ServletFilter非常相似),在调用DWR操作之前进行一些身份验证工作。
拦截器被正确调用,但我需要访问拦截器中的groupId和groupName数据。

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

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

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

2 个答案:

答案 0 :(得分:2)

使用org.directwebremoting.AjaxFilter

每次在针对此过滤器配置的方法上发出Ajax请求时,DWR都会调用AjaxFilter的doFilter方法。传入此方法的AjaxFilterChain允许过滤器将方法详细信息传递给链中的下一个实体。

通常,该方法将执行以下操作:

  1. 检查请求
  2. 可选择更改方法,对象或参数
  3. 使用AjaxFilterChain调用链中的下一个实体,或者决定采取其他一些操作。
  4. (可选)修改返回给用户的值
  5. 采取其他行动(例如记录)

答案 1 :(得分: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 Framework中的

MethodInterceptor 与Spring Security中的 MethodSecurityInterceptor 完全相同。