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.

0 ответов

Другие вопросы по тегам