2014-09-25 5 views
0

Мне нужно заблокировать прямой доступ к страницам jsp.ограничение безопасности не работает

Я настроил мой web.xml, как это:

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>My Hidden Pages</web-resource-name> 
    <url-pattern>/*.jsp</url-pattern> 
    </web-resource-collection> 
    <auth-constraint></auth-constraint> 
</security-constraint> 

но все страницы все еще доступны, введя свой адрес в адресной строке браузера. Как я могу это решить?

FYI Я использую 2,5

благодаря

ответ

0

пристани-Maven-плагин и сервлет-API Вы не скрываете JSP-страницы таким образом.

Есть несколько общих подходов (лучший выбор первого)

  1. Прекомпилировать JSPs во время сборки, и не включают в себя фактические JSP файлы в файле WAR.

  2. Поместите свой JSP-файл в папку WEB-INF где-нибудь. Затем доступ к jsps осуществляется через сервлет Controller. Это использует защиту WEB-INF, чтобы предотвратить прямой доступ к файлам JSP, что должно соблюдать все контейнеры сервлетов.

    видеть прошлое StackOverflow вопросы по этому вопросу:

    Есть много больше, просто поиск "JSP в веб-инф", чтобы узнать больше об этой концепции.

  3. Правильная настройка реализации JSP Jetty. После этого это означает, что все доступ к JSP-файлам, например, должны проходить через эту версию JspServlet.

    См. webdefault.xml, например, как определяется это сопоставление.

    Если вы видите ошибку или предупреждение при запуске около "No JSP Support for ", то вы знаете, что вы не настроили JSP правильно, и это означает, что все JSP-файлы вместо этого будут обслуживаться статическим способом.

    Примечание: Если вы используете более старую версию Jetty (что-то старше версии 7.6.16) или используете более старую версию Java (что-то старше 1.7_40) или используете Jetty для Windows (проблема здесь решается с Jetty 9.3.0, который должен появиться в следующем месяце или около того), тогда даже это можно обойти.

+0

Просто обновляя плагин jetty-maven-plugin (теперь я использую 9.2.3), тег 'security-constraint' начинает работать. Благодарю. – helloIAmPau

0

Неверный номер <url-pattern>. Он должен быть <url-pattern>*.jsp</url-pattern> без /. Допустимые образцы в соответствии со спецификацией являются:

Шаблон URL- является URI, который относительно контекста приложения. Шаблоны могут включать в себя:

  • отображение Path, начиная с / и заканчивая /* Эта модель идентифицирует любой ресурс, который начинается с заданного пути, например, /catalog/* или /catalog/products/*
  • отображение внутренних линий, начиная с *. этой шаблон идентифицирует любой ресурс с данным расширением, например, *.jsp или *.gif
  • Картинка по сервлету по умолчанию, содержащая только / Этот шаблон идентифицирует defaul t сервлета приложения.
  • Точные совпадения Этот шаблон использует строку, которая представляет определенный ресурс, например /snoop - это отображение сервлета, а /list/banner.jsp - это сопоставление файлов.

Если вы хотите обезопасить страницы в данной папке вы должны использовать шаблон как /folder/*, если вы хотите, чтобы защитить все страницы используют только *.jsp, если вы хотите, чтобы защитить все страницы, кроме index.jsp, вам нужно добавьте другое ограничение, которое позволяет явно получить доступ к файлу /index.jsp.

+0

Мне нужно скрыть все jsps в корне приложения (это и есть причина моего отображения URL). BTW с использованием шаблона '* .jsp' страницы все еще доступны. – helloIAmPau

+0

@helloIAmPau Тогда это должно быть проблемой в Jetty, поскольку * .jsp работает в других контейнерах. – Gas

+0

Да! См. Мой комментарий выше. – helloIAmPau

Смежные вопросы