2009-06-15 2 views
6

Esiste un modo configurabile in Struts 1.x in modo che le mie classi di azioni vengano eseguite solo su HTTP "POST".Limita le richieste HTTP a "POST" solo in Struts 1.x

Capisco che posso usare request.getMethod() nella mia classe di azioni e quindi fare determinate "cose" basate su quello.

saluti, Jonathan

+0

Cosa vorresti che succedesse se qualcuno invia un GET? – skaffman

+0

È solo una semplice app di acquisizione dati e se fosse GET non salveremmo i dati nel DB. Volevo solo verificare se esistesse un modo "configurabile" xml di fare altro che programmaticamente. – Jonathan

+0

Infine come hai implementato questo? – xain

risposta

3

Ecco e l'idea che sia qualche soluzione programmatica e di configurazione. È possibile creare un ActionMapping personalizzato ...

public class YourPOSTRequiredActionMapping extends ActionMapping { } 

... e l'utilizzo nelle puntoni Config per le mappature che sono solo POST.

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

Poi, si potrebbe estendere i montanti RequestProcessor e sovrascrivere 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; 
    } 
} 

Assicurarsi di configurare il puntoni config per usare YourRequestProcessor.

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

Ho basato questo su un vecchio codice di lavoro, ma non ho nemmeno compilato il codice di esempio sopra.

2

Un modo per eseguire questa operazione senza modificare l'applicazione è scrivere un servlet Filtro che rifiuta le richieste non POST. È quindi possibile collegare questo filtro nel file web.xml e configurare i relativi pattern URL in modo che corrispondano ai percorsi dei controller Struts.

5

È possibile utilizzare web.xml per definire le autorizzazioni di accesso. Tale vincolo impedisce richieste 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

Come si personalizza cosa succede se l'applicazione riceve una richiesta GET in questo scenario? – xain

+0

@xain: sarebbe meglio chiedersi come una nuova domanda che spiega cosa si vuole fare. – McDowell

0

McDowell risposta è tutt'altro che accettabile, a meno che non si dispone di alcuni requisiti specifici. Dovresti ottenere un errore HTTP 503 che puoi catturare per mostrare informazioni significative agli utenti o lasciarlo alla gestione degli errori effettivi dalla tua attuale configurazione web.