Как защитить доступ к каталогам / папкам веб-приложений?
В веб-приложении легко разместить логику при программном доступе к представлениям, но как вы удерживаете пользователя от перехода на саму страницу jsp?
пример
@RequestMapping("/SomeView")
public void goToSomeView{
if(logicIsNotSatisfied)
return new ModelAndView("failure"):
else
return new ModelAndView("welcome");
}
Достаточно просто
Но как не дать пользователю набрать в веб-браузере прямой путь к ресурсу, например:
http://mydomain/myWebApp/resouces/stuff.png
Вопрос:
Как мы накладываем ограничения на возможность пользователям получать прямой доступ к каталогам веб-приложения?
2 ответа
Поместите JSP под WEB-INF, и они не будут доступны снаружи. Обратите внимание, что прямой доступ к ним не должен быть большой проблемой, потому что все пользователи получат сообщение об ошибке или пустую страницу, учитывая, что все данные, к которым обращается представление, будут недоступны, так как контроллер не был вызывается.
Что касается статических ресурсов, если вы не хотите, чтобы пользователи могли получать к ним доступ без контроля доступа, то также поместите их в WEB-INF или вне каталогов веб-приложений и получите доступ к ним через контроллер, который проверяет, что пользователь может доступ к ним, читает их и записывает их в ответ.
Я хотел бы дать несколько советов. Не думайте о JSP как о странице, на которую переходят пользователи. JSP не является статической HTML-страницей. JSP - это способ динамического рендеринга HTML.
Если вы делаете то, что предлагал JB Nizet, вам никогда не придется беспокоиться о том, что JSP-рендеринг что-либо сделает, если он не прошел точку входа вашего приложения. Так как вы контролируете эти точки входа, т.е. сервлеты, фильтры, контроллеры и т. д., вы можете решить, как будет отображаться ответ.
Запрограммируйте ваши преобразования URL соответствующим образом. Пользователи пытаются получить доступ
http://mydomain/myWebApp/resouces/stuff.png
не обязательно получать статический ресурс изображения stuff.png
если они прошли соответствующие фильтры. Вы можете очень хорошо заблокировать доступ.