0

I'm creating web-app using JSR286, Struts2 for portlets on WebSphere Portal 6.1.5 The problem is that I can't make work built in CookieInterceptor. I've tried this in 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>

And the action:

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;
        }
    }

The method setCookiesMap is not invoked. I've used firebug, I really see, that request header has my "my-filter-cookie" in it (set using JQuery cookie plugin). WebDeveloper for Mozilla shows that browser has such cookie and it will be expired CURRENT_TIME+1 year.

I've tried another configuration. I've wrote interceptor for action:

<!-- 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>

Again fail...? What do I do wrong? Please, suggest.

Capacytron
  • 3,425
  • 6
  • 47
  • 80

1 Answers1

0

You are:

  • Defining an interceptor called "superInterceptor" (not sure where that fits in)
  • Defining an interceptor stack called "ekp-cookie-stack", which consists solely of the cookie interceptor
  • Declaring "portletDefaultStack" as your default interceptor stack

Since "portletDefaultStack" does not contain your "ekp-cookie-stack", then the cookie interceptor will not be invoked. Basically, you are configuring one stack and then telling Struts2 to use a different stack.

Try this:

<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" />

You may also want to set a breakpoint in the CookieInterceptor's intercept method to make sure that it is being invoked properly.

Steven Benitez
  • 10,936
  • 3
  • 39
  • 50
  • I've just got it. I thought, that **** would be appended to stack that is defined as **default-interceptor-ref**, but it was my mistake. – Capacytron Nov 20 '10 at 18:56
  • Got strange exception in SystemOut.log: – Capacytron Nov 22 '10 at 20:37
  • [22.11.10 23:31:30:177 MSK] 0000006c SystemOut O 11/22 23:31:30.176 [WARN ] com.opensymphony.xwork2.util.logging.commons.CommonsLoggerOgnl ValueStack: com.opensymphony.xwork2.util.logging.commons.CommonsLoggerError setting expression 'my-filter-cookie' with value 'SOME-VALUE-GOEs-HERE': (my- filter) - cookie at ognl.SimpleNode.setValueBody(SimpleNode.java:257) Why does it oocurs? my-filter-cookie is a cookie... Don't understand it. Maybe '-' sign is confusing for OGNL? – Capacytron Nov 22 '10 at 20:39