es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Token de CSRF de Struts2 en plantilla de Velocity

Cómo utilizar el interceptor de token CSRF de Struts 2 en una plantilla Velocity.

A continuación se muestra un ejemplo estándar de JSP con etiquetas de Struts:

<s:form action="UpdateUser">
<s:textfield name="name" label="Nombre de usuario">
</s:textfield>
<s:textfield name="address" label="Dirección">
</s:textfield>
<s:submit name="submit" value="Actualizar">
</s:submit>
<%-- añadir token a JSP para ser utilizado por el interceptor de Token --%>
<s:token></s:token>
</s:form>

Quiero lograr lo mismo utilizando una plantilla Velocity y quiero saber cómo obtener el valor del token en Velocity.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para utilizar el interceptor de tokens CSRF de Struts 2 en una plantilla de Velocity, debes seguir los siguientes pasos:

    1. Declarar el espacio de nombres s de Struts en Velocity para soporte de etiquetas:
      #set ($s = $request.getAttribute("struts" ))
      
    2. Utilizar la etiqueta s:token en la plantilla de Velocity para generar el token.
      <s:token></s:token>
      
    3. Incluir el valor del token generado en el envío del formulario utilizando nuevamente la etiqueta s:token.
      <form action="UpdateUser" method="post">
         <input type="hidden" name="name" value="$name">
         <input type="hidden" name="address" value="$address">
         <$s.token />
         <input type="submit" name="submit" value="Update">
      </form>
      
    4. En el método de validación de tu acción, verifica el valor del token con el valor almacenado en la sesión. Para obtener el valor del token en Velocity, puedes utilizar la etiqueta s:property con el atributo token.
      public void validate() {
         String token = (String) session.get("struts.token");
         if(!StringUtils.equals(token, tokenFromRequest)) {
             addFieldError("submit", "Token CSRF inválido");
         }
      }
      
      Plantilla de Velocity:
      <s:property value="#session['struts.token']" token="true"></s:property>
      

    Nota: Asegúrate de que el TokenInterceptor esté configurado en el archivo struts.xml de tu aplicación Struts 2.

Comments are closed.