Play Framework: Как войти в систему, используя POST? - PullRequest
1 голос
/ 20 июня 2011

Я занимаюсь разработкой веб-сервиса с использованием Play Framework. Мой следующий шаг - войти в систему с помощью модуля secure. Тем не менее, я получаю исключение nullpointer как следующее:

play.exceptions.JavaExecutionException
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:227)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
at play.utils.Java.invokeStaticOrParent(Java.java:146)
at controllers.Secure$Security.invoke(Secure.java:193)
at controllers.Secure$Security.access$0(Secure.java:184)
at controllers.Secure.authenticate(Secure.java:61)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:540)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:498)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:474)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:469)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:157)
... 1 more

Согласно Модуль Playframework Secure: как вам «войти», чтобы протестировать защищенный контроллер в FunctionalTest? можно сделать запись в / login, которую я тоже протестировал, и она отлично работает в тестовом кейсе.

Чтобы воссоздать исключение nullpointer, сделайте следующее:

  1. Элемент списка
  2. Создать новый проект
  3. Добавление защищенного модуля в качестве зависимости
  4. установить зависимости 'play dependencies'
  5. Перезапустите веб-приложение.
  6. Отправить сообщение / логин. Я добавил два заголовка запроса (имя пользователя и пароль), но исключение возникает как с заголовками, так и без них. Сообщение (в моем случае) отправлено с использованием REST Client для Firefox.

Благодарю за любую помощь!

1 Ответ

1 голос
/ 20 июня 2011

Похоже, ваше имя пользователя или пароль пустые. Поскольку вы отправляете сообщение в действие входа в систему, вы должны отправлять имя пользователя и пароль как часть зашифрованного тела запроса, но, похоже, вы делаете что-то другое (или я неправильно понял, что вы имели в виду, добавив заголовки запроса).

Это также может быть ошибкой в ​​модуле Secure, так как я думаю, что этот случай должен быть обработан более изящно. Причина, по которой вы получаете исключение NullPointerException, заключается в том, что invokeStaticOrParent необходимо определить типы аргументов, чтобы выяснить, какой метод вызывать, и в случае нулевого аргумента выдается исключение при попытке вызвать getClass().

Действие аутентификации в модуле Secure, вероятно, должно пометить параметр пароля как @ Обязательный и выполнить проверку против validation.hasErrors() перед тем, как попытается вызвать базовый метод authentify / authenticate вместо того, чтобы после того, как это делает сейчас.

На самом деле есть даже существующий билет , связанный с этим, но я не знаю, какой прогресс был достигнут. Некоторое время спустя я проверю, есть ли ожидающий коммит для решения этой проблемы, и если нет, я посмотрю, что я могу сделать с отправкой патча.

...