web.xml - Фильтры Java - сервлетов и проблемы с шаблоном WebSphere - URL
-
18-09-2019 - |
Вопрос
Итак, мы запускаем веб-приложение, которое было протестировано на Tomcat, Glassfish, WebLogic и WebSphere.Все работают корректно, за исключением WebSphere.Проблема в том, что фильтры не обрабатываются для файлов в определенном каталоге.
Например, у меня есть фильтр, который проверяет язык пользователя из файлов cookie браузера, а другой, который получает имя пользователя, в web.xml они настроены следующим образом:
<!-- ****************************** -->
<!-- * Security context filtering * -->
<!-- ****************************** -->
<filter>
<filter-name>SetSecurityContextFilter</filter-name>
<filter-class>
com.test.security.SecurityContextServletFilter
</filter-class>
</filter>
<!-- ****************************** -->
<!-- ** Locale context filtering ** -->
<!-- ****************************** -->
<filter>
<filter-name>SetLocaleFilter</filter-name>
<filter-class>
com.test.locale.LocaleServletFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>SetSecurityContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SetLocaleFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Оба фильтра устанавливают статическую переменную threadlocal, к которой можно получить доступ из статического средства получения, но когда тот же файл 'test.jsp' вызывает средства получения в разделе 'контекстный корень/js' они возвращают значения по умолчанию (как если бы они были не заданы), находясь в 'контекстный корень/страницы" они верны.
Есть какие-нибудь идеи?
Заранее благодарю.
Решение
Я обнаружил, в чем была проблема!
В моем web.xml далее у меня есть это:
<security-constraint>
<web-resource-collection>
<web-resource-name>Test Application</web-resource-name>
<url-pattern>/pages/*</url-pattern>
</web-resource-collection>
<auth-constraint>
...
</auth-constraint>
</security-constraint>
Если я изменю шаблон URL на '/ *', чтобы для каждой страницы в корневом каталоге контекста требовался логин, все фильтры будут выполняться корректно, постоянно.Однако это означает, что моя страница входа в систему не имеет доступа ни к каким CSS-файлам, но это еще одна проблема!
Ваше здоровье.
Другие советы
Определение вашей страницы входа в систему как form-login-page может помочь ей получить ресурсы css
следующим образом
<form-login-config>
<form-login-page>/Login.jsp</form-login-page>