Ho usato il framework Struts 2 e ho creato un'applicazione web che ha una pagina di login. Ho tre diverse classi Action
denominate Action1
, Action2
, Action3
e diverse visualizzazioni per pagine JSP che vengono visualizzate eseguendo alcune regole di business nelle classi Action
.puntoni2 aggiunta di interceptor in struts.xml per tutte le classi di azioni
Ora, voglio verificare se un utente ha effettuato l'accesso prima che la classe Action
esegua l'elaborazione. Quindi, ho creato un intercettore qui sotto che funziona bene.
public String intercept(ActionInvocation invocation) throws Exception
{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
if(session.isNew())
{
response.sendRedirect("Login.action");
}
System.out.println("Interceptor Fired");
String result = invocation.invoke();
return result;
}
Quello che voglio essere in struts.xml
è invece di aggiungere un intercettore per tutte le azioni come quella qui sotto
<interceptor-ref name="newStack"/>
Il mio file struts.xml
ha
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="printMsgInterceptor" class="LoginInterceptor"></interceptor>
<interceptor-stack name="newStack">
<interceptor-ref name="printMsgInterceptor"/>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="actone" class="Action1">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
<action name="acttwo" class="Action2">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
<action name="actthree" class="Action3">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
</package>
Per ogni azione che desidera avere una definizione scritta in struts.xml
che esegua l'intercettatore anziché aggiungere manualmente
<interceptor-ref name="newStack"/>
Grazie per la risposta Funziona gr8 Non voglio questo intercettore per una sola pagina che è la Pagina di accesso perché genera un ciclo di reindirizzamento. C'è un modo per evitare l'interceptor per una particolare azione –
in alternativa è possibile definire lo stack intercettore per un pacchetto specifico e ogni pacchetto che estende userà il suo stack predefinito.Altre azioni che non dovrebbero essere intercettate (come Login) possono essere definite in altri pacchetti che non estendono quello in cui hai definito lo stack predefinito dell'intercettore –