2009-06-15 13 views
6

Czy istnieje sposób konfigurowalny w Struts 1.x, więc moje klasy akcji są wykonywane tylko na HTTP 'POST'.Ogranicz żądania HTTP do 'POST' tylko w Struts 1.x

Rozumiem, że mogę używać request.getMethod() w mojej klasie działania, a następnie wykonać pewne "rzeczy" na tej podstawie.

Pozdrawiam, Jonathan

+0

Co by się stało, gdyby ktoś wysłał GET? – skaffman

+0

To tylko prosta aplikacja do przechwytywania danych i jeśli to było GET, nie zapisalibyśmy danych do DB. Chciałem tylko sprawdzić, czy istnieje "konfigurowalny" xml sposób działania poza programowym. – Jonathan

+0

Wreszcie, w jaki sposób wdrożyłeś to? – xain

Odpowiedz

3

Oto i pomysł, który jest zarówno część programową i config rozwiązanie. Można tworzyć niestandardowe ActionMapping ...

public class YourPOSTRequiredActionMapping extends ActionMapping { } 

... i wykorzystania w rozporek config dla odwzorowań, które są tylko słupek.

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

Następnie można rozszerzyć rozpórki RequestProcessor i zastąpić 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; 
    } 
} 

Upewnij skonfigurować poprzeczne config do korzystania YourRequestProcessor.

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

Oparłem to na starym, działającym kodzie, ale nie skompilowałem nawet powyższego przykładowego kodu.

2

Jednym ze sposobów zrobienia tego bez zmiany aplikacji jest napisanie apletu Filtr, który odrzuca żądania inne niż POST. Następnie możesz podłączyć ten filtr do pliku web.xml i skonfigurować wzorce adresów URL, aby pasowały do ​​ścieżek kontrolerów Struts.

5

Możesz użyć swojej web.xml, aby zdefiniować uprawnienia dostępu. To ograniczenie zapobiega żądaniom 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

Jak dostosować, co się stanie, jeśli aplikacja otrzyma żądanie GET w tym scenariuszu? – xain

+0

@xain - lepiej byłoby zapytać o to nowe pytanie wyjaśniające, co chcesz zrobić. – McDowell

0

Odpowiedź McDowell jest daleka od akceptowalnej, chyba że masz jakieś szczególne wymagania. Powinieneś otrzymać błąd HTTP 503, który możesz złapać, aby pokazać użytkownikom istotne informacje lub po prostu pozostawić zarządzanie błędami z bieżącej konfiguracji sieci.