2013-12-15 6 views
0

Из веб-приложения легко логически приложить доступ к представлениям программно, но как вы можете заставить пользователя перейти прямо на страницу jsp?Как защитить доступ к каталогам/папкам webapp?

Пример

@RequestMapping("/SomeView") 
public void goToSomeView{ 

if(logicIsNotSatisfied) 
    return new ModelAndView("failure"): 
else 
    return new ModelAndView("welcome"); 
} 

достаточно просто

Но как удержать пользователя от ввода в веб-браузере прямой путь к ресурсу , например:

http://mydomain/myWebApp/resouces/stuff.png 

Вопрос:

Как мы ограничиваем пользователей возможностью прямого доступа к каталогам webapp?

ответ

4

Поместите JSP под WEB-INF, и они не будут доступны снаружи. Обратите внимание, что доступ к ним напрямую не должен быть большой проблемой, потому что все пользователи будут получать ошибку или пустую страницу, учитывая, что все данные, к которым обращается просмотр, будут недоступны, поскольку контроллер не был вызывается.

Что касается статических ресурсов, если вы не хотите, чтобы пользователи имели доступ к ним без контроля доступа, а также размещали их под WEB-INF или за пределами каталогов webapp и получали доступ к ним через контроллер, который проверяет что пользователь может получить к ним доступ, прочитать их и записать в ответ.

+0

Простой. Спасибо – stackoverflow

2

Я хотел бы дать несколько советов. Не думайте о JSP, как пользователи страниц. JSP не является статической HTML-страницей. JSP - это способ динамического рендеринга HTML.

Если вы сделаете то, что предложили JB Nizet, вам никогда не придется беспокоиться о том, что JSP-рендеринг ничего не касается, если он не прошел через точку входа вашего приложения. Поскольку вы контролируете эти точки входа, т.е. сервлеты, фильтры, контроллеры и т. д., вы можете решить, как реагировать.

Запрограммируйте соответствующие URL-адреса. Пользователи, пытающиеся получить доступ к

http://mydomain/myWebApp/resouces/stuff.png 

не обязательно должны получить статический ресурс stuff.png изображения, если они прошли через соответствующие фильтры. Вы можете очень хорошо блокировать доступ.

+0

Спасибо, что нашли время, чтобы объяснить это. Я заметил подход Спрингса; используя Spring-Security. Но я решил, что существует стратегия с использованием самого сервера приложений. Возвращаясь к '' JB Nizet'guuggion, если вы поместите все под каталог WEB-INF /, то у вас возникнет проблема поиска ресурсов из самого представления (то есть <- этого никогда не найти) Если эти ресурсы всегда будут доступ непосредственно? Или следует ограничивать это только тем, когда у пользователя есть правильная авторизация/аутентификация для доступа к этой странице с этим ресурсом? – stackoverflow

+1

@stack Что JB Nizet говорит, что вы не можете делать '', потому что это говорит клиенту браузера делать запрос GET на 'yourhost.com/WEB/images/stuff.png' и' WEB/images/stuff .png' не является доступным URL (если вы не сопоставляете его с каким-либо сервлетом или контроллером). Весной вы можете зарегистрировать статический обработчик ресурсов и поместить нужные правила. Обычно эти ресурсы будут 'css',' js' или файлами изображений, поэтому аутентификация действительно не применяется. –

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