2012-06-01 3 views
2

У меня есть веб-сайт MVC с технологиями Java. У меня есть ряд .jsp, которые при перенаправлении через соответствующие сервлеты работают нормально, но при непосредственном доступе они не работают. Я хочу, чтобы мои пользователи не обращались напрямую к .jsps.Предотвращение доступа пользователей к .jsp за исключением переадресации

То есть они могут использовать www.url.com/Website/MyServlet, который затем направляет их www.url.com/Website/MyServlet.jsp, но я хочу, чтобы предотвратить их от прямого обращения к www.url.com/Website/MyServlet.jsp с HttpServletRequest будут отсутствовать атрибуты и не будут правильно отображаться. Неужели это должна быть обычная практика? Как я могу это сделать, могу ли я написать сопоставление, которое перенаправляет все * .jsp на не найденные, если только это не является прямым?

Бьюсь об заклад, что я могу написать фильтр, который забирает все директивы без FORWARD (ВКЛЮЧАЕТ ЗАПРОС и т. Д.), Сопоставленные с * .jsp и отправляя 404 для них, но Im думает, что должен быть простой способ? У кого-нибудь есть предложения?

+0

звучит, как вы должны работать точно * почему * он не работает, если доступ непосредственно ... –

+2

не согласен с @JonSkeet. Очень распространено использование контроллеров для пересылки JSP с определенными наборами атрибутов, и в этом случае нежелательно разрешать прямой доступ к JSP. – taz

+0

@ Jon Skeet: Я точно знаю это. Это MVC и восходящий сервлет подготавливает выходные данные, которые привязаны к запросу и пересылаются в представление jsp для его вывода. Если вы напрямую просматриваете представление, нет данных, прикрепленных к запросу, и представление не имеет смысла для отображения. Я, конечно, могу поймать это и отобразить сообщение, но маршрутизация на соответствующий сервлет будет работать лучше. – gbtimmon

ответ

6

Поместите их в папку /WEB-INF и измените соответствующие пути вперед.

request.getRequestDispatcher("/WEB-INF/MyServlet.jsp").forward(request, response); 

Файлы в /WEB-INF/META-INF) папки не доступны для общественности.

+0

Так просто. Спасибо. Недостаточно спать прошлой ночью ..... – gbtimmon

+0

Добро пожаловать. – BalusC

+1

PS: Такое отображение вида встроено в практически любую современную структуру, которая поддерживает JSP (т. Е. Весна, структуры и т. Д.). – Matt

0

Поместите код в JSP, который определяет, выполняются ли необходимые условия и предпринимаются соответствующие действия, такие как пересылка на сервлет контроллера или направление пользователей в соответствующее место, и при необходимости не пытается отобразить «правильный» JSP условия не выполняются.

+0

Ответ BalusC может быть более технически корректным. В любом случае это должно сработать; это зависит от того, хотите ли вы обновить каждый 'request.getRequestDispatcher() ...' для любых изменений имени файла JSP или обновить каждый JSP для любых изменений URL сервлета.Оставляя обновления и пересылку в Java-коде (как в ответе BalusC), чище, IMO, но возможно, что может возникнуть ситуация, когда вы захотите обновить и предпринять действия в JSP. – taz

2

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

Вы можете написать фильтр для include/forward к СПЯ

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