Ограничить HTTP-запросы только POST в Struts 1.x - PullRequest
6 голосов
/ 15 июня 2009

Есть ли настраиваемый способ в Struts 1.x, поэтому мои классы действий выполняются только по HTTP 'POST'.

Я понимаю, что могу использовать request.getMethod() в своем классе действий и затем делать определенные "вещи", основываясь на этом.

С уважением, Jonathan

Ответы [ 4 ]

5 голосов
/ 01 ноября 2009

Вы можете использовать web.xml для определения прав доступа. Это ограничение предотвращает запросы 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>
3 голосов
/ 15 июня 2009

Вот и идея, которая является как программным, так и конфигурационным решением. Вы можете создать собственный ActionMapping ...

public class YourPOSTRequiredActionMapping extends ActionMapping { }

... и используйте в конфигурации Struts только для сопоставлений POST.

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

Затем вы можете расширить распорки RequestProcessor и переопределить 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;
    }
}

Обязательно настройте конфигурацию Struts для использования YourRequestProcessor.

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

Я основал это на каком-то старом рабочем коде, но я даже не скомпилировал приведенный выше пример кода.

2 голосов
/ 15 июня 2009

Один из способов сделать это без изменения вашего приложения - написать фильтр сервлетов, который отклоняет запросы не POST. Затем вы можете подключить этот фильтр к файлу web.xml и настроить его URL-шаблоны в соответствии с путями ваших контроллеров Struts.

0 голосов
/ 22 мая 2015

Ответ McDowell далеко не приемлем, если у вас нет особых требований. Вы должны получить ошибку HTTP 503, которую вы можете перехватить, чтобы показать пользователям важную информацию, или просто оставить ее для фактического управления ошибками из вашей текущей веб-конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...