Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 564
Записей в блоге: 1
#1

Безопасное скачивание файлов jsp

07.10.2014, 07:37. Просмотров 1090. Ответов 9
Метки нет (Все метки)

Добрый день!
как можно организовать безопасное скачивание файлов, сейчас у меня скачивание файлов по постоянной ссылке, и можно скачивать без авторизации,
надо сделать так чтобы эта ссылка была временная, и через некоторое время не работала, как это можно организовать , или если есть предложения как можно организовать это.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2014, 07:37
Ответы с готовыми решениями:

Загрузка файлов на сервер в JSP
Доброго времени суток! Ув. форумчане подскажите пожалуйста, как реализовать...

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

Как отобразить структуру (иерархическую) файлов в JSP?
С JSP только ещё разбираться начал и вот стала задача отобразить иерархичскую...

Подключение файлов javascript на jsp-странице
Здравствуйте, пытаюсь подключить js файл в jsp, файл находится в...

Нужно средствами Java (JSP) осуществить копирование файлов с клиента на сервер и поместить в MySQL.
Привет всем !!! Есть задача - средствами Java (JSP) осуществить копирование...

9
KEKCoGEN
Эксперт Java
2040 / 1915 / 495
Регистрация: 28.12.2010
Сообщений: 7,668
07.10.2014, 10:34 #2
Если погуглить 5 сек, можно найти это
https://github.com/jclouds/jclouds-e...teTempURL.java

Так же если очень хочется реализовать самому, алгоритм придумать несложно. В линк зашивается закодированное время после которого ссылка не действительна, а так же оригинальный путь до файла. На сервисе это дело расшифровывается и проверяется.
1
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 564
Записей в блоге: 1
07.10.2014, 13:19  [ТС] #3
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Если погуглить 5 сек, можно найти это
https://github.com/jclouds/jclouds-e...teTempURL.java
Так же если очень хочется реализовать самому, алгоритм придумать несложно. В линк зашивается закодированное время после которого ссылка не действительна, а так же оригинальный путь до файла. На сервисе это дело расшифровывается и проверяется.
я сейчас делаю только возможность скачивать через сервлет, а уже потом сделаю генерацию ссылки как говорите вы,
сейчас застрял на том что не скачать файл через сервлет
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package comp;
 
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class Download extends HttpServlet {
 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String filePath = request.getParameter("Statement");
        String fileName = request.getParameter("92031101Statements_11-20-2012_11-20-2012_92061101.zip");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        ServletOutputStream out=response.getOutputStream();
        response.addHeader("Content-Disposition","attachment;filename="+fileName);
        File f = new File(getServletContext().getRealPath("/"),filePath+"/"+fileName);
        long len = f.length();
        out.println(getServletContext().getRealPath("/"));
        response.addHeader("Content-Length", String.valueOf(len));
        response.setContentType("application/download");
        FileInputStream fileInputStream = new FileInputStream(f);
        int i;
        while((i=fileInputStream.read())!=-1){
            out.write(i);
        }
        fileInputStream.close();
        out.close();
    }
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
 
}
здесь как бы все правильно, но файл не скачивается, или я что то делаю не так,
подскажите

Добавлено через 53 минуты
этот сервлет работает, если вместо переменных подставить собственные значения вручную,
а вот если передавать значения через request он почему в браузере написано ошибка на строке
request.getRequestDispatcher("/download").forward(request, response);
Java
1
2
3
4
5
6
7
8
<%@page contentType="text/html; charset=utf-8"%>
<%
 
    request.setAttribute("path", "statement");
    request.setAttribute("name", "test.zip");
 
    request.getRequestDispatcher("/download").forward(request, response);
%>
как правильно вызывать сервлет и передать ему эти параметны
0
Shpota
12 / 12 / 4
Регистрация: 17.12.2012
Сообщений: 71
11.10.2014, 03:22 #4
Вот эти строки у Вас должны получить значения переданные в запросе
Java
1
2
        String filePath = request.getParameter("Statement");
        String fileName = request.getParameter("92031101Statements_11-20-2012_11-20-2012_92061101.zip")
Но судя по jsp, параметры у вас имеют совсем другие имена.
Для начала поменяйте код в сервлете на
Java
1
2
        String filePath = request.getParameter("path");
        String fileName = request.getParameter("name")
И залогируйте код сервлета (ну или просто System.out.println, а вывод посмотрите в консоли сервера), так как судя по всему у вас filePath и fileName равны null.
1
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 564
Записей в блоге: 1
11.10.2014, 09:17  [ТС] #5
Цитата Сообщение от Shpota Посмотреть сообщение
Вот эти строки у Вас должны получить значения переданные в запросе
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
* * * * String filePath = request.getParameter("Statement");
* * * * String fileName = request.getParameter("92031101Statements_11-20-2012_11-20-2012_92061101.zip")
Но судя по jsp, параметры у вас имеют совсем другие имена.
Для начала поменяйте код в сервлете на
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
* * * * String filePath = request.getParameter("path");
* * * * String fileName = request.getParameter("name")
И залогируйте код сервлета (ну или просто System.out.println, а вывод посмотрите в консоли сервера), так как судя по всему у вас filePath и fileName равны null.
да это я менял забыл поменять обратно.
меня интересует правильно ли я вызываю сервлет и передаю ему параметры
request.getRequestDispatcher("/download").forward(request, response);
0
Shpota
12 / 12 / 4
Регистрация: 17.12.2012
Сообщений: 71
12.10.2014, 02:39 #6
Как вариант можно вот так
Java
1
response.sendRedirect("/path_to_your_servlet?path=statement&name=test.zip");
Цитата Сообщение от ELDQS Посмотреть сообщение
сейчас у меня скачивание файлов по постоянной ссылке
Почему бы просто не поместить эту ссылку в форму на статической html страничке?
1
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 564
Записей в блоге: 1
12.10.2014, 19:53  [ТС] #7
нет так сейчас и сделано, точнее было сделано,
нет я как бы хотел вызвать сервлет с сервера без участия пользователя
0
Shpota
12 / 12 / 4
Регистрация: 17.12.2012
Сообщений: 71
12.10.2014, 20:14 #8
Тогда уточните задачу, не понятно, зачем тогда вообще использовать jsp. В каких случаях "сервлет будет вызван без участия пользователя"?
0
ELDQS
10 / 10 / 1
Регистрация: 07.04.2011
Сообщений: 564
Записей в блоге: 1
13.10.2014, 07:37  [ТС] #9
Цитата Сообщение от Shpota Посмотреть сообщение
Тогда уточните задачу, не понятно, зачем тогда вообще использовать jsp. В каких случаях "сервлет будет вызван без участия пользователя"?
мне нужно из jsp вызывать сервлет без участия пользователя, сервлет на сервере будет что то делать без участия пользователя
0
Shpota
12 / 12 / 4
Регистрация: 17.12.2012
Сообщений: 71
13.10.2014, 13:36 #10
Цитата Сообщение от ELDQS Посмотреть сообщение
мне нужно из jsp вызывать сервлет без участия пользователя
Хорошо, но ведь пользователь будет загружать эту страницу? На ней еще что-то будет, кроме функционала по скачиванию файла?
Цитата Сообщение от Shpota Посмотреть сообщение
Java
1
response.sendRedirect("/path_to_your_servlet?path=statement&name=test.zip");
А чем вас не устраивает этот вариант?
0
13.10.2014, 13:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 13:36

Пересылка запроса с jsp страницы на эту же jsp с другими параметрами
Хочу реализовать паджинацию страницы, на страницу приходить запрос со списком...

[JSP] Назначать класс элементов в header.jsp на разных страницах
Есть header.jsp, который я включаю в свои страницы: &lt;link...

Как реализовать аналог <b onclick="<jsp:forward page=xxx.jsp/>menuN</b> ??
Smysl zadachi v sledujuschem: menu.jsp - formiruet menu ishodia iz znachenii v...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru