Struts2 Portlet Leia cookies usando cookieInterceptor
-
26-09-2019 - |
Pergunta
Estou criando Web-App usando o JSR286, STRUTS2 para portlets no WebSphere Portal 6.1.5 O problema é que não posso fazer o trabalho incorporado no CookieInterceptor. Eu tentei isso em 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>
E a ação:
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;
}
}
O método setcookiesmap não é invocado. Eu usei o Firebug, eu realmente vejo, esse cabeçalho de solicitação tem meu "meu filtro de filtro" (definido usando o plug-in JQuery Cookie). O WebDeveloper for Mozilla mostra que o navegador tem esse cookie e será expirado current_time+1 ano.
Eu tentei outra configuração. Eu escrevi 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>
Novamente falha ...? O que eu faço de errado? Por favor sugira.
Solução
Tu es:
- Definindo um interceptador chamado "SuperInterInterceptor" (não tenho certeza de onde isso se encaixa)
- Definindo uma pilha interceptadora chamada "EKP-Cookie-Stack", que consiste apenas no interceptador de cookies
- Declarando "PortletDefaultStack" como sua pilha de interceptores padrão
Como o "PortletDefaultStack" não contém seu "EKP-Cookie-Stack", o interceptor de cookies não será invocado. Basicamente, você está configurando uma pilha e depois dizendo ao Struts2 para usar uma pilha diferente.
Experimente isso:
<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" />
Você também pode querer definir um ponto de interrupção no CookieInterceptor
's intercept
Método para garantir que esteja sendo chamado corretamente.