2009-05-27 114 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