Ограничьте Запросы HTTP 'POST' только в Struts 1.x

Вы добавили Select() после Where() или раньше?

Вы должны добавить его после, из-за логики параллелизма:

 1 Take the entire table  
 2 Filter it accordingly  
 3 Select only the ID's  
 4 Make them distinct.  

Если вы делаете выбор Во-первых, предложение Where может содержать только атрибут ID, поскольку все остальные атрибуты уже удалены.

Обновление: для ясности этот порядок операторов должен работать:

db.Items.Where(x=> x.userid == user_ID).Select(x=>x.Id).Distinct();

Вероятно, хотите добавить .toList() в конце, но это необязательно:)

6
задан Jonathan 15 June 2009 в 14:37
поделиться

3 ответа

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

public class YourPOSTRequiredActionMapping extends ActionMapping { }

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

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

Затем вы можете расширить Struts 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" />

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

3
ответ дан 10 December 2019 в 00:43
поделиться

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

2
ответ дан 10 December 2019 в 00:43
поделиться

Вы можете использовать свой 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>
5
ответ дан 10 December 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: