Я создаю простую WebApplication, используя сервлеты. Я новичок, но попытался изучить большую часть этой технологии. Я ничего не могу понять. Один из моих сервлетов является полезным BalusC FileServletКак заставить сервлет распознать вызывающий JSP и сеанс
http://balusc.blogspot.mx/2007/07/fileservlet.html
Он отвечает на GET запросы с нужным файлом, красивым и чистым.
Я использую этот FileServlet служить CSV файлы для Dygraph
http://dygraphs.com/
У меня есть два типа пользователей: гости и администраторы. Гости должны иметь возможность просматривать график, но НЕ ДОЛЖНЫ СКАЧАТЬ файл CSV. Админы должны быть в состоянии сделать то и другое.
ФайлServlet отвечает на URL-шаблоны как: file/* (* - это имя файла), и это очень удобно, так как Dygraph читает файл, указанный в URL-адресе.
В этом веб-браузере есть loginServlet, и я хочу, чтобы избежать файлового хранилища для GIVE файла, если пользователь просто скопирует URL-адрес, который указан для Dygraph. FileServlet уже способен получать сеанс и loggeduser с этого сеанса, но я не знаю, как определить, какая страница была вызвана методом GET. Я хочу, чтобы файловый сервер служил файлу ТОЛЬКО при вызове из кода JSP, а не из адресной строки браузера.
Поясню немного:
Я имею в виду -как гостя USER- следующий код Javascript должен отображать графика (FileServlet служит файл)
<div id="graphdiv2" style="width:640px; height:480px;">
<script type="text/javascript">
g2 = new Dygraph(
document.getElementById("graphdiv2"),
"${messages.rutacsv}", // path to CSV file
{
rollPeriod: 10,
showRoller: true
}
);
</script>
</div>
переменная: «$ {messages.rutacsv}»заменяется на сервлет для чего-то, что выглядит следующим образом:
„файл/2012-04-20_1.csv“
Так т он Dygraph загружает файл красиво и рисует линии.
НО, я хочу, чтобы FileServlet обнаруживал, когда пользователь копирует этот URL-адрес после ContextName и блокирует его, поэтому только Dygraph может загрузить файл.
Например, если пользователь в своем браузере:
http://localhost:8080/MyWebApp/file/2012-04-20_1.csv
Он не должен быть в состоянии загрузить его. Только админы должны быть в состоянии.
СЕЙЧАС, я думаю, что, возможно, я должен реализовать FileServlet, поэтому его нужно вызывать с другим шаблоном URL или с помощью метода POST, поэтому простая копия-паста пользователя не может пройти проверку «origining-JSP» ,
BTW, я возвращаюсь от попытки с Struts2, что слишком сложно для этого приложения. Я отказался от него для удобства и простоты разработки с помощью простых сервлетов и JSP.
Похоже, что вам нужен фильтр сервлета, который проверяет URL-адрес и текущую роль пользователя и позволяет напрямую загружать только администраторов. Для других запросов просто верните 404 или отправьте перенаправление на JSP. –
Хорошо, но я не думаю, что я реализовал роли пользователей. Я только делаю session.setAttribute («logonuser», «имя пользователя») в сеансе. Наверное, мне нужно сделать эту дополнительную работу ... не так ли? –
Это зависит от ваших требований. Если какой-либо зарегистрированный пользователь может напрямую загрузить, тогда вы можете проверить, присутствует ли атрибут logonuser в сеансе, иначе переадресовывается, например, в сервлет регистрации. –