tutorial servlet funciona etiquetas como java java-ee struts2 struts

servlet - struts2 in java



struts2 agregando interceptores en struts.xml para todas las clases de acción (2)

He utilizado el framework Struts 2 y he creado una aplicación web que tiene una página de inicio de sesión. Tengo tres clases de Action diferentes denominadas Action1 , Action2 , Action3 y diferentes vistas para páginas JSP que se procesan ejecutando cierta lógica comercial en las clases de Action .

Ahora, quiero verificar si un usuario ha iniciado sesión antes de que la clase de Action lleve a cabo el procesamiento. Entonces, creé un interceptor a continuación que funciona bien.

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

Lo que quiero ser en struts.xml es en lugar de agregar un interceptor para todas las acciones como la siguiente

<interceptor-ref name="newStack"/>

Mi archivo struts.xml tiene

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

Para cada acción, quiero tener una definición escrita en struts.xml que ejecute el interceptor en lugar de agregar manualmente

<interceptor-ref name="newStack"/>


<interceptor name="test" class="Full path for LoginInterceptor" /> <interceptor-stack name="testStack"> <interceptor-ref name="test"/> <interceptor-ref name="defaultStack"/> //here you are including default stack </interceptor-stack> </interceptors> <default-interceptor-ref name="testStack"></default-interceptor-ref>

Ahora testStack se ejecutará para cada solicitud


Utilizar

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

Si no inserta interceptor-ref manualmente para cada acción, podría usar el default-interceptor-ref para interceptar todas las acciones que no hayan definido explícitamente la configuración de los interceptores. Vea Cómo configuramos un Interceptor para ser utilizado con cada Acción .

Podemos crear nuestras propias pilas nombradas e incluso declarar una nueva pila de interceptor predeterminada para un paquete

<package name="default" extends="struts-default" > <interceptors> <interceptor-stack name="myStack"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors>

Sin embargo, si usted dice que el interceptor anterior funciona bien, lo alentaré a ser cauteloso con respecto a la lógica comercial de que la acción de inicio de sesión no se ejecutará si falla en la primera ejecución. En lugar de buscar la nueva sesión, debe verificar los resultados del usuario autenticado y guardar estos resultados en la sesión que podría verificar en el interceptor. Vea esta pregunta, por ejemplo .

El ejemplo de escribir el interceptor que usa la información de usuario autenticada con la sesión que puede encontrar aquí .