Как защитить PDF-файл с помощью фильтров Tomcat? - PullRequest
0 голосов
/ 27 мая 2011

HI,

В настоящее время я запускаю экземпляр tomcat со стойками 1, и я хотел бы, чтобы tomcat обнаружил, когда в URL запрашиваются файлы PDF (например, ссылка: http://www.***.com/files/action=download&name=myreport.pdf).

На данный момент я хочу, чтобы был создан экземпляр класса Java, а затем с помощью API pdf я хочу ввести пароль в файл.Суть в том, что я не хочу, чтобы хранилище паролей находилось в исходном файле PDF, который я обслуживаю, вместо этого я хочу, чтобы пароль вводился во время выполнения Tomcat.

Пожалуйста, дайте мне знать, если у вас естьИдеи, я провел небольшое исследование и наткнулся на фильтры Tomcat, но я не уверен, что это решит эту проблему.

Обратите внимание, что пароли хранятся в таблице базы данных.

Спасибо

Ответы [ 4 ]

2 голосов
/ 27 мая 2011

Из фильтра мы вызываем Java-класс для фактической «вставки пароля».

Запись в файле web.xml перенаправит ваш вызов на определенный фильтр.

<!--web.xml call all calls to .pdf will invoke the particular filter.-->
<filter>
   <filter-name>PDF Filter</filter-name>
   <filter-class>PDFFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>PDF Filter</filter-name>
   <url-pattern>*.pdf</url-pattern>
</filter-mapping>

//This is the actual filter
public class PDFFilter implements Filter 
{
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException 
    {
        PDFPasswordInjector pdfPassInject = new PDFPasswordInjector();
        //use HttpServletRequestWrapper to get the pdf location/pdf name
        pdfPassInject.injectPassword( "<pdf location>" );

        chain.doFilter(request, response);
    }
}

//Java class to inject the password
public class PDFPasswordInjector
{
    public boolean injectPassword( String sPDFName )
        {
                // retrieve password from DB
                // use API to inject password to PDF
        }
}
1 голос
/ 27 мая 2011
  1. Создание сервлета
  2. Установка шаблона url на * .pdf
  3. При каждом вызове вашего pdf-URL сервлет выполняется.
  4. Делайте все, что вам нужнохочу от сервлета до возврата PDF пользователю в ответ.
0 голосов
/ 27 мая 2011

Фильтры не способ решить эту конкретную проблему.Фильтры позволяют изменять запросы и заставлять их перенаправляться или пересылаться в разные сервлеты.Но они не позволяют переписать тело ответа.Насколько я понимаю, это то, что вы пытаетесь сделать.

Вам придется внести изменения в файл PDF в сервлете, как описано в ответе @ Aardvocate.

0 голосов
/ 27 мая 2011

Должно быть достаточно просто написать Filter для перехвата всех запросов, которые возвращают PDF. Метод doFilter () фильтра имеет доступ к запросу и ответу, поэтому вы можете изменять его по своему усмотрению.

...