2

応答にいくつかのヘッダーを追加するインターセプターを作成することを目指しています。現在、次のインターセプターを持っています

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

ここで 2 つの問題があります。

1• Java でプロパティ「Cache-control」を定義できません。

2• ヘッダー名は予測できません。つまり、どのヘッダーも設定で次のように定義できます。

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

2 つの質問があります。

  • Struts2 構成で定義されたインターセプターでヘッダーを受信するにはどうすればよいですか。
  • これを行うためのより良い方法はありますか?
4

1 に答える 1

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]); 
于 2013-04-05T14:38:10.130 に答える