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

这里我有两个问题。

1• 我无法在 java 中定义属性“Cache-control”。

2• 标头名称是不可预测的,即任何标头都可以在配置中定义为

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

我有两个问题:

  • 如何在 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 回答