1

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

String joinGroup(String groupId, String groupName);

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

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

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

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

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

4

2 回答 2

3

使用 org.directwebremoting.AjaxFilter

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

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

  1. 检查请求
  2. 可选择更改方法、对象或参数
  3. 要么使用 AjaxFilterChain 调用链中的下一个实体,要么决定采取其他行动。
  4. 可选择修改返回给用户的值
  5. 采取其他行动(例如记录)
于 2009-05-28T06:05:09.370 回答
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 几乎完全相同。

于 2009-05-27T16:09:15.807 回答