Я реализую отредактированную версию безопасного контроллера по умолчанию в последней версии Play Framework.
Я несколько раз читал, что если вы хотите настроить безопасное поведение, вам лучше скопировать исходный код безопасного модуля и начать его настройку.
Я так и сделал, и после редактирования необходимых зависимостей я получил следующую ошибку:
Execution exception
NullPointerException occured : null
In /app/controllers/SecureController.java (around line 194)
190:
security = classes.get(0);
191:
}
192:
if(security==null)System.out.println("security is null");
193:
try {
194:
return Java.invokeStaticOrParent(security, m, args);
195:
} catch(InvocationTargetException e) {
196:
throw e.getTargetException();
197:
}
198:
}
199:
200:
}
Первый логический вывод, к которому следует перейти: не существует классов, реализующих необходимый внутренний класс Secure$Security. Но наверняка есть подкласс, поэтому мне было интересно, как можно исправить эту ошибку.
Сеанс отладки узнает, что class.get(0) действительно содержит класс с аннотацией @With. Таким образом, исключение нулевого указателя должно быть вызвано чем-то внутри класса, содержащего @With(SecureController). Но я оставил этот класс таким, каким он был, я просто отредактировал ссылку в аннотации With.
Итак, я предполагаю, что каким-то образом в реализации класса есть нулевой указатель. Но даже когда я реализую поведение по умолчанию без каких-либо ссылок, оно все равно генерирует исключение нулевого указателя.
РЕДАКТИРОВАТЬ: я нашел причину этой ошибки, но «почему» не ясно. Эта строка находится в реализации метода authentication(...) в подклассе SecureController$Security:
flash.put("url", request.url);
Почему это не удается?
Я понимаю, что эту ситуацию может быть очень сложно воспроизвести, но мне было интересно, сталкивался ли кто-нибудь с такой же проблемой.
Спасибо за помощь (во многих темах, связанных с Play!).