Короткий вопрос .Как можно выполнить фильтры сервлетов до выполнения декларативной проверки безопасности?
Длинный вопрос .Для моего веб-приложения я пытаюсь управлять всеми своими требованиями безопасности, используя декларативную безопасность сервера: я установил ограничение безопасности на <url-pattern>/secure/*</url-pattern>
с <auth-method>FORM</auth-method>
и <form-login-page>/sign-in.xhtml</form-login-page>
.
, чтобы обеспечить (основанная на cookie) функция «запомнить меня», я установил фильтр сервлетов, который перехватывает каждый запрос, проверяет, не вошел ли пользователь в систему, проверяет, может ли он войти в систему автоматически (через cookie), в конечном итоге входит в систему, используя сервлет на основеlogin.
<filter-mapping>
<filter-name>CustomLoginFilter</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
Теперь, если пользователь открывает свой браузер и подключается к mysite.com
, все просто работает.Но если пользователь открывает свой браузер и делает прямой запрос к чему-то вроде mysite.com/secure/secret.xhtml
, я наблюдаю следующее поведение:
- GET /secure/secret.xhtml
- бэк-компонентовсоздаются экземпляры log-in.xhtml (FacesContext доступен)
- вызывается CustomLoginFilter.doFilter (), (FacesContext равен NULL)
Это, очевидно, препятствует всему процессу.Я не могу найти способ дать преимущество моему CustomLoginFilter над сервером «декларативный фильтр безопасности» (или что-то еще);изменение порядка объявлений в web.xml тоже не помогает ... есть идеи?Спасибо!