JSF ViewExpired смешивается с SecurityFilter
Итак, я рассмотрел ответы, связанные с ViewExpiredException и обработал их с помощью запросов Ajax, и теперь у меня это хорошо получилось. Однако у меня есть конфигурация, которая не получает должным образом ViewExpiredException.
В приложении есть SecurityFilter, который отслеживает каждый запрос и определяет, нужен ли URL-адрес пользователю, прошедшему проверку подлинности, а затем проверяет, прошел ли пользователь проверку подлинности (в сеансе ищите объект пользователя).
Проблема в том, что фильтр обрабатывает запрос до того, как JSF фактически определит исключение ViewExpiredException, поэтому мы пересылаем их на страницу входа, поскольку они не аутентифицированы. Это происходит потому, что сеанс истек, а пользовательский объект больше не находится в сеансе.
Если я уберу фильтр безопасности, мы получим исключение ViewExpiredException.
У меня вопрос, должен ли я использовать другую технику для проверки авторизации? Тот, который позволяет JSF обрабатывать запрос, а затем проверяет авторизацию?
Я также подумал, что, может быть, проверять авторизацию только тогда, когда ее получают вместо сообщения, а затем я получаю исключение ViewExpiredException, которое оставляет пробел в авторизации, если кто-то использует POST напрямую.
Самая большая проблема заключается в том, что я не могу определить в фильтре, истекло ли время сеанса или пользователь ввел URL-адрес, для которого он не авторизован. Результат одинаков, независимо от того, перенаправлены ли они на страницу входа, но сообщение об ошибке не может быть определено.
Примечание: мы используем MyFaces,JSF 2.2 и PrimeFaces
Любые предложения с благодарностью!
1 ответ
Если вы используете контейнер tomcat, то он поддерживает сеанс для запроса, создает поток для желаемого сервлета и затем обрабатывает объекты HttpRequest и HttpResponse для этого сервлета в этом потоке. теперь, когда вы обновляете страницу браузера после внесенных вами изменений, запрос получает сеанс и отображает вашу страницу.
Теперь предположим, что вы внесли некоторые изменения в конфигурацию своего проекта, после чего вас могут попросить перезапустить сервер apache, который, в свою очередь, очистит все сеансы, созданные вашим контейнером tomcat, и вы иногда получите исключение ViewStateExpired.