У меня есть Java-webapp. Webapp упакован как военный файл. Эти военные файлы позволяют статический контент, который напрямую доставляется через HTTP. Для сервлетов в этой войне я могу выполнить HTTP-аутентификацию (реализовать ее с помощью самого сервлета). Но я также хочу HTTP-auth для статического контента. Как я могу это понять?В Java-webapp (war), как я могу использовать HTTP-auth для статического контента?
ответ
Создайте класс, который реализует javax.servlet.Filter. См. The Essentials of Filters
Главный метод: doFilter, который передается объектами ServletRequest, ServletResponse и FilterChain. Здесь вы применяете аутентификацию.
Затем объявить фильтр в web.xml и отображения фильтра следующим образом (карты каждому запросу)
<filter>
<filter-name>Authentication Filter</filter-name>
<filter-class>
com.nfsdsystems.security.filters.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Put статичные HTML файлы в direcotry и определяют свои ограничения безопасности в вашем web.xml. Сопоставьте ограничения с соответствующей ролью.
<security-constraint>
<display-name>securedResources</display-name>
<web-resource-collection>
<web-resource-name>securedRes</web-resource-name>
<url-pattern>/secured/*</url-pattern>
<http-method>GET</http-method>
<http-method>PUT</http-method>
<http-method>HEAD</http-method>
<http-method>TRACE</http-method>
<http-method>POST</http-method>
<http-method>DELETE</http-method>
<http-method>OPTIONS</http-method>
</web-resource-collection>
<auth-constraint>
<description>
authenticatedUser_securedRes</description>
<role-name>authenticatedUsed</role-name>
</auth-constraint>
</security-constraint>
Это было бы предпочтительным способом сделать это с помощью царств. – Nathan
Как я могу определить имена пользователей/паролей таким образом? – Mnementh
Это зависит от сервера приложений, который вы используете. Для Tomcat, google "jdbc realm configuration". Для websphere предпочтительным способом будет ldap. – svachon
Это отлично работает для меня. Я написал собственный фильтр. – Mnementh