我有一个 DWR 操作,其方法签名如下:

String joinGroup(String groupId, String groupName);

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

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

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

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

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

有帮助吗?

解决方案

使用 org.directwebremoting.AjaxFilter

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

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

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

其他提示

我将你使用的的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
}

的MethodInterceptor 在Spring框架是非常精确的相同的 MethodSecurityInterceptor 春季安全。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top