簡體   English   中英

在Struts2攔截器中接收不可預測的參數

[英]Receiving unpredictable parameters in Struts2 interceptor

我的目標是編寫一個攔截器,以添加一些標頭作為響應。 我目前有以下攔截器

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配置中定義的攔截器中接收任何標頭。
  • 有什么更好的方法可以做到這一點嗎?

使用動作配置,您已經定義了幾個通過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]); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM