CDI Conversation плохо играет с безопасностью контейнера
Я определил в своем файле web.xml роли и ограничения безопасности, основанные на ФОРМЕ, и все это работает. Проблема заключается в том, что, находясь внутри диалога и тайм-аута сеанса, контейнер перенаправляет запрос в файл /login.xhtml, чтобы пользователь вошел в систему, как и предполагалось, однако я получаю "org.jboss.weld.context.NonexistentConversationException".
Теперь для всех перенаправлений на страницы ошибок я могу использовать "nocid=true", который прекрасно работает, но, видимо, <form-login-page>
значение не позволяет передавать параметры.
Я перепробовал все, что мог придумать, включая добавление фильтров сервлетов для удаления значения cid, но они не вызываются перед формой входа в систему. Я искал способы удалить значение cid в PhaseListeners, но безрезультатно.
Кто-нибудь знает, как решить эту проблему? Я не могу поверить, что я единственный, кто имеет это.
Вот то, что мои соответствующие части моего web.xml:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>MyRealm</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml</form-error-page>
</form-login-config>
</login-config>
<error-page>
<exception-type>
javax.faces.application.ViewExpiredException</exception-type>
<location>/error/sessionTimeout.xhtml?nocid=true</location>
</error-page>
<error-page>
<exception-type>
org.jboss.weld.context.NonexistentConversationException
</exception-type>
<location>/index.xhtml?nocid=true</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/404.xhtml?nocid=true</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.xhtml?nocid=true</location>
</error-page>
Таким образом, способ проверки состоит в том, чтобы просто запросить ресурс, не входя в систему, который защищен <security-constraints>
и придерживаться? CID =1. Желаемое поведение - получить страницу входа, но вместо этого вы получаете сообщение об отсутствии несуществующего диалога. Если вы вошли в систему, вы будете перенаправлены в представление /index.xhtml.
Кажется, что <form-login-page>
необходимо разрешить передачу параметра "nocid = true".
Обратите внимание, что все это делается на Wildfly 10.