2009-06-15 9 views
6

Hay una forma configurable en Struts 1.x, por lo que mis clases de acción solo se ejecutan en HTTP 'POST'.Restringir las solicitudes HTTP a 'POST' solo en Struts 1.x

Entiendo que puedo usar request.getMethod() dentro de mi clase de acción y luego hacer ciertas 'cosas' basadas en eso.

Saludos, Jonathan

+0

¿Qué te gustaría que ocurra si alguien envía un GET? – skaffman

+0

Es solo una aplicación de captura de datos simple y si fuera GET no guardaríamos los datos en la base de datos. Solo quería comprobar si había xml forma "configurable" de hacer otra cosa que programáticamente. – Jonathan

+0

Finalmente, ¿cómo implementaron esto? – xain

Respuesta

3

He aquí y la idea de que es a la vez un poco de solución de programación y configuración. Se puede crear una costumbre ActionMapping ...

public class YourPOSTRequiredActionMapping extends ActionMapping { } 

... y el uso de sus puntales de configuración para las asignaciones que sólo están POST.

<action path="/your/path" type="YourAction" className="YourPOSTRequiredActionMapping" /> 

Entonces, se podría extender los puntales RequestProcessor y anular processMapping

public class YourRequestProcessor extends RequestProcessor { 
    protected ActionMapping processMapping(HttpServletRequest request, HttpServletResponse response, String path) throws IOException { 
     ActionMapping mapping = super.processMapping(request, response, path); 
     if (mapping instanceof YourPOSTRequiredActionMapping) { 
      if (!request.getMethod().equals("POST")) { 
       mapping = null; 
      } 
     } 
     return mapping; 
    } 
} 

Asegúrese de configurar su configuración puntales de usar YourRequestProcessor.

<controller processorClass="YourRequestProcessor" nocache="true" contentType="text/html; charset=UTF-8" locale="false" /> 

He basado esto en algún código de trabajo anterior, pero ni siquiera he compilado el código de ejemplo anterior.

2

Una forma de hacerlo sin cambiar su aplicación es escribir un filtro de servlet que rechace solicitudes que no sean POST. A continuación, puede conectar este filtro en su archivo web.xml y configurar sus patrones de URL para que coincidan con las rutas de los controladores de Struts.

5

Puede usar su web.xml para definir los permisos de acceso. Esta restricción impide las solicitudes GET:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>struts action servlet</web-resource-name> 
     <url-pattern>*.do</url-pattern> 
     <http-method>GET</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <!-- no one! --> 
    </auth-constraint> 
    </security-constraint> 
+0

¿Cómo se personaliza lo que sucede si la aplicación recibe una solicitud GET en este escenario? – xain

+0

@xain - sería mejor preguntar como una nueva pregunta que explica lo que quiere hacer. – McDowell

0

La respuesta de McDowell dista mucho de ser aceptable a menos que tenga algunos requisitos específicos. Debería obtener un error de HTTP 503 que puede capturar para mostrar información significativa a los usuarios o simplemente dejarlo en la gestión de errores actual de su configuración web actual.

Cuestiones relacionadas