在 Spring 拦截器中访问 DWR 发布数据
题
我有一个 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 允许过滤器将方法详细信息传递到链中的下一个实体。
通常该方法会执行以下操作:
- 检查请求
- 可选择更改方法、对象或参数
- 使用 AjaxFilterChain 调用链中的下一个实体,或者决定采取其他操作。
- 可选择修改返回给用户的值
- 采取一些其他行动(例如记录)
其他提示
我将你使用的的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 春季安全。
不隶属于 StackOverflow