2013-12-03 3 views
4

Я обновляю веб-приложение (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> 

ответ

5

Фигурные это.

Оказывается, сервлет статуса загружал документ CSS, и эта загрузка запускала аутентификацию. Что меня смущает, так это то, что как JSP, так и JSP-версии, и эти JSP не нужно рассматривать в ограничении безопасности (один из шагов, которые я сделал, состоял в том, чтобы добавить *.jsp к моему ограничению безопасности). JSP существуют на том же пути, что и CSS.

Новый, работая web.xml

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Unprotected Pages</web-resource-name> 
     <url-pattern>/health/*</url-pattern> 
     <url-pattern>/monitoringCommon.css</url-pattern> 
    </web-resource-collection> 
</security-constraint> 
Смежные вопросы