Портлет Struts2 считывает файлы cookie с помощью CookieInterceptor - PullRequest
0 голосов
/ 20 ноября 2010

Я создаю веб-приложение с использованием JSR286, Struts2 для портлетов в WebSphere Portal 6.1.5. Проблема в том, что я не могу сделать работу встроенной в 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 не вызывается. Я использовал firebug, я действительно вижу, что в заголовке запроса есть мой «my-filter-cookie» (устанавливается с помощью плагина cookie JQuery). WebDeveloper для 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>

Опять провал ...? Что я делаю не так? Пожалуйста, предложите.

1 Ответ

0 голосов
/ 20 ноября 2010

Вы находитесь:

  • Определение перехватчика, называемого "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 s intercept, чтобы убедиться, что он вызывается правильно.

...