2013-04-05 36 views
2

我打算編寫一個攔截器,在響應中添加一些頭文件。目前,我有以下攔截在Struts2攔截器中接收不可預知的參數

public class CachingInterceptor extends AbstractInterceptor{ 

    @Override 
    public String intercept(ActionInvocation ai) throws Exception { 
     HttpServletResponse response = (HttpServletResponse) getActionContext(ai).get(StrutsStatics.HTTP_RESPONSE); 
     if(null != response) { 
      response.setHeader("Cache-control","no-store,no-cache"); 
      response.setHeader("Pragma","no-cache"); 
      response.setHeader("Expires","-1"); 
     } 
     return ai.invoke(); 
    } 
} 

我需要提高它在頭可以在配置文件中定義這樣一種方式(struts.xml

.... 
<!-- Define and add following interceptor in default interceptor stack --> 
<interceptor name="CachingInterceptor" class="demo.CachingInterceptor"> 
.... 

<action name="myAction" class="demo.myAction"> 
    .... 
<param name="Cache-control">no-store,no-cache</param> 
<param name="Pragma">no-cache</param> 
<param name="Expires">-1</param> 
    .... 
</action> 

現在,我已經在我的攔截器類中定義的屬性獲取標頭值

private String pragma;  //with getter, setter 
private String expires; //with getter, setter 

這裏我有兩個問題。

1•我無法在java中定義屬性「Cache-control」。

2•標題名稱是不可預測的,即任何標頭可以在配置中被定義爲

<param name="other-header">some-value</param> 

我有兩個問題:

  • 我怎麼能接受在Struts2配置中定義的攔截任何頭。
  • 有沒有更好的方法來做這件事?
+0

WTQ?您在攔截器放置的靜態參數中接收標題。什麼是更好地滿足您的要求。所描述的 – 2013-04-05 09:08:39

+0

,我想定義HTTP頭,同時在配置中映射動作。 – 2013-04-05 13:10:00

回答

1

通過操作配置,您已經定義了幾個靜態參數,這些參數通過staticParams攔截器進行處理。這個攔截器應該先在堆棧中進行。然後,您只需從行動上下文中檢索它們。

Map<String, Object> params = ActionContext.getContext().getParameters(); 
response.setHeader("Cache-control", ((String[])params.get("Cache-control"))[0]); 
response.setHeader("Pragma", ((String[])params.get("Pragma"))[0]); 
response.setHeader("Expires", ((String[])params.get("Expires"))[0]); 
+0

Thanks'Roman C',這個答案提供瞭解決問題的關鍵。當我找到一些時間來處理它時,我會在稍作修改後更新答案。 – 2013-04-09 03:55:31