0

我正在使用 JSR286、Struts2 为 WebSphere Portal 6.1.5 上的 portlet 创建 Web 应用程序问题是我无法在 CookieInterceptor 中构建工作。我在src/struts.xml中试过这个:

<package name="web-app-default" extends="struts-portlet-default , json-default" abstract="true">

    <interceptors>
        <interceptor name="superInterceptor" class="ru.app.SuperInterceptor" />         
        <interceptor-stack name="ekp-cookie-stack">
            <interceptor-ref name="cookie">
                    <param name="cookiesName">my-filter-cookie</param>
                </interceptor-ref>  
        </interceptor-stack>
    </interceptors>



    <default-interceptor-ref name="portletDefaultStack" />

    <global-results>
            <result name="error">/jsp/common/error.jsp</result>
    </global-results>
</package>

和行动:

public abstract class EventGeneralAction extends GeneralAction implements CookiesAware{
//some code...

    /** {@link CookieInterceptor} should inject ekp-filter-cookie. */
        @SuppressWarnings("unchecked")
        public void setCookiesMap(Map cookies){
            LOG.trace("#setCookiesMap -> cookies[{}]", cookies);
            this.cookies = cookies;
        }
    }

不调用方法setCookiesMap 。我用过萤火虫,我真的看到了,那个请求头里面有我的“my-filter-cookie”(使用 JQuery cookie 插件设置)。WebDeveloper for Mozilla 显示浏览器有这样的 cookie,它将在 CURRENT_TIME+1 年过期。

我尝试了另一种配置。我已经写了拦截器:

<!-- Shows events on desired day of year. ShowDayEventsAction is a subclass of EventGeneralAction -->
    <action name="main" class="ru.app.ShowDayEventsAction" >
        <interceptor-ref name="cookie">
            <param name="cookiesName">my-filter-cookie</param>
            </interceptor-ref>  
        <result>/jsp/event/view/day.jsp</result>
    </action>

又失败了……?我做错了什么?请,建议。

4

1 回答 1

0

你是:

  • 定义一个名为“superInterceptor”的拦截器(不确定它适合哪里)
  • 定义一个名为“ekp-cookie-stack”的拦截器堆栈,它仅由 cookie 拦截器组成
  • 将“portletDefaultStack”声明为默认拦截器堆栈

由于“portletDefaultStack”不包含您的“ekp-cookie-stack”,因此不会调用 cookie 拦截器。基本上,您正在配置一个堆栈,然后告诉 Struts2 使用不同的堆栈。

尝试这个:

<interceptor-stack name="portletDefaultStackWithCookie">
    <interceptor-ref name="portletState"/>
    <interceptor-ref name="portletAware"/>
    <interceptor-ref name="cookie">
        <param name="cookiesName">my-filter-cookie</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"/>
</interceptor-stack>

<default-interceptor-ref name="portletDefaultStackWithCookie" />

您可能还想在CookieInterceptor'intercept方法中设置断点以确保正确调用它。

于 2010-11-20T18:54:20.630 回答