Я обновляю веб-приложение (Servlet 3.0/Tomcat 7), для которого требуется базовая аутентификация на большинстве своих страниц. Это приложение имеет небольшой набор сервлетов мониторинга, ни один из которых не должен быть защищен. В моих web.xml
, я в настоящее время имею следующие security-constraint
блок (частная информация заменена буквами алфавита):Множество ограничений безопасности в web.xml не работает
<security-constraint>
<display-name>Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>CN=A,OU=B,OU=C,OU=D,DC=E,DC=F</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Unprotected Pages</web-resource-name>
<url-pattern>/health/*</url-pattern>
</web-resource-collection>
</security-constraint>
В рамках «здоровья» пути есть три конечные точки:
/health/monitor/status
/health/monitor/version
/health/monitor/version/xml
Когда я нахожусь в любой из конечных точек version
, я не запрашиваю учетные данные (как и ожидалось). Однако, когда я посещаю страницу status
, браузер предоставляет мне базовое окно проверки подлинности. Когда я нажимаю «Отмена», мне разрешено загружать страницу в обычном режиме. Аналогично, если я уже вошел в систему, я не буду снова запрашивать экран состояния, пока мой логин не истечет.
Я понимаю, что это можно решить, не имея безопасного контента, развернутого до /*
, но перемещение его было бы большим количеством работы по изменению жестко закодированных путей и тестирования (это очень старое приложение) ... и у меня есть 5 или еще 6. Я открыт для этого, если это необходимо, но я хотел узнать, возможно ли это, без, изменяя любые защищенные пути контента. I do имеют полную свободу над путями сервлетов мониторинга.
Это похоже на Tomcat 7 - Multiple security-constraints not working, но вместо полного отказа только одна из моих конечных точек терпит неудачу, что я нахожу очень странным. Я потратил некоторое время на поиск, и похоже, что то, что я делаю, должно работать ... но это не так.
Я использую web-app
версии 3.0, развертывая Tomcat 7 (попробовали версии 7.0.42 и 7.0.47). Я уже пытался изменить порядок блоков security-constraint
.
Мысли?
Вот мой полный web.xml
для справки (обратите внимание на мониторинг сервлеты управляются с помощью Java аннотаций, так нет):
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>TPS</display-name>
<servlet>
<servlet-name>CFMLServlet</servlet-name>
<servlet-class>railo.loader.servlet.CFMLServlet</servlet-class>
<init-param>
<param-name>configuration</param-name>
<param-value>/WEB-INF/railo/</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>AMFServlet</servlet-name>
<servlet-class>railo.loader.servlet.AMFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>AttachmentServlet</servlet-name>
<servlet-class>com.package.toolshed.AttachmentServlet</servlet-class>
<init-param>
<param-name>configFilePath</param-name>
<param-value>com/package/toolshed/configuration/tps-config.xml</param-value>
</init-param>
<init-param>
<param-name>configPathParam</param-name>
<param-value>attachment.servlet.pathPrefix</param-value>
</init-param>
<load-on-startup>6</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CFMLServlet</servlet-name>
<url-pattern>*.cfm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CFMLServlet</servlet-name>
<url-pattern>*.cfml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CFMLServlet</servlet-name>
<url-pattern>*.cfc</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AMFServlet</servlet-name>
<url-pattern>/flashservices/gateway/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AttachmentServlet</servlet-name>
<url-pattern>/attachments/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.cfm</welcome-file>
<welcome-file>index.cfml</welcome-file>
</welcome-file-list>
<security-constraint>
<display-name>Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>CN=A,OU=B,OU=C,OU=D,DC=E,DC=F</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Unprotected Pages</web-resource-name>
<url-pattern>/health/*</url-pattern>
</web-resource-collection>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>TPS</realm-name>
</login-config>
<security-role>
<role-name>CN=A,OU=B,OU=C,OU=D,DC=E,DC=F</role-name>
</security-role>
</web-app>