2013-10-08 5 views
3

Я столкнулся с этой проблемой в гобелене 5.2 Применения:GET отправляет вместо POST. Гобелен

форма требует, чтобы метод запроса POST быть и что т: FormData параметра запроса имеет значение.

В журнале доступа я обнаружил, что иногда существуют формы с методом GET от разных пользователей. Хотя, согласно документам, Tapestry 5 использует схему post-redirect-get. Эта страница не разрешает анонимный доступ, поэтому она не может быть роботом. Поэтому я разочарован тем, что может быть причиной такой проблемы. Предложения пожалуйста.

Существует несколько вариантов выбора, обновленных Ajax, на форме.

Редактировать 2. Такой запрос GET поступал от пользователей, а не ботов, потому что из этого ips был успешный вход в систему.

+0

Есть ли какие-либо действия Аякса происходит, что может быть исполнительскими запросы GET? –

ответ

0

Я собираюсь угадать и сказать, что это веб-гусениц, сканирующий ваш производственный сайт. Возможно, вам понадобится customise tapestry's exception handling, чтобы скрыть исключения от веб-сканеров.

Обычно вы можете обнаружить веб-сканеры через заголовок запроса пользовательского агента.

См. here для получения списка известных ботов.

+1

Это не может быть искатель, см. Выше. – piquick

0

Я заметил, что form компонента имеет следующее:

Object onAction(EventContext context) throws IOException { 
    ... 
    executeStoredActions(); 
    ... 
} 

private void executeStoredActions() 
{ 
    String[] values = request.getParameters(FORM_DATA); 

    if (!request.getMethod().equals("POST") || values == null) 
     throw new RuntimeException(messages.format("invalid-request", FORM_DATA)); 
    } 
    ... 
} 

Это означает, что он будет обрабатывать все «действие» события из себя и любых вложенных компоненты. Я не думаю, что у вас есть вложенный компонент, запускающий событие «действие» (например, actionlink), а не обработка/прерывание события? Эти события «пузырятся» до обработчика формы и вызовут ошибку.

См. here по причинам, по которым событие может «пузыриться».

0

Это старый вопрос, но в случае, если кто-то еще наткнулся на него в поиске ... вы можете «украсить» RequestExceptionHandler Tapestry, чтобы поймать это исключение и перенаправить пользователя на страницу, которую они, вероятно, хотели.

Смотрите Гобелен Конкретных Ошибки часто задаваемых код для реализации этого:

https://tapestry.apache.org/specific-errors-faq.html

Смежные вопросы