2013-11-16 2 views
0

Я пытаюсь добавить заголовок в файл PDF непосредственно перед отображением к клиенту. У меня есть сервлет фильтра, который будет перехватывать запрос/ответ, прежде чем приложение попросит «Сохранить». Я тестировал свой класс PDFBox на автономном PDF-файле, и это работает. Я испытываю трудности с сервлетом фильтра. Я попробовал HttpServletRequestWrapper, но не смог получить входной поток. Кажется, он пуст. Вот мой код фильтра:Добавление заголовка в файл PDF, прежде чем он будет загружен с помощью PDFBox и Java Servlet фильтра

public class AddFOUOFilterServlet implements Filter { 
/** The log. */ 
private static Log log = LogFactory.getLog(AddFOUOFilterServlet.class); 

private String loginUrl = null; 

/** 
* @desc - This function initializes the global variables. 
* @param filterConfig - FilterConfig settings that come from the web.xml 
*/ 
public void init(FilterConfig filterConfig) throws ServletException { 
    log.debug("Inside AddFOUOFilterServlet init "); 
    ServletContext context = filterConfig.getServletContext(); 
} 

/** 
* @desc - the method called by the server before each server request 
* @param req - the servlet request 
* @param res - the servlet response 
* @param chain - a FilterChain object that lists all filters to be called by the server 
* @throws IOException, ServletException 
*/ 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
    //log.debug("Inside doFilter"); 

    // cast the HTTP request and response objects and get the url path info 
    HttpServletRequest request = (HttpServletRequest)req; 
    HttpServletResponse response = (HttpServletResponse)res; 
    HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(request); 
    InputStream is = request.getInputStream(); 
     log.debug("is.available() "+is.available()); 
     byte[] buf = new byte[1024]; 
     while((is.read(buf))>0) { 
      log.debug("Reading the InputStream from the wrapper "); 
    } 
    if (request.getParameter("DocumentName") != null && request.getParameter("BlobID") != null) 
    { 
     log.debug("Processing the PDF URIs... "); 
    try 
    { 
      AddFOUOToReport addfouo = new AddFOUOToReport(); 
      OutputStream os = null; 
      os = addfouo.doIt(is, "For Official Use Only"); 
      chain.doFilter(requestWrapper, res); 
    } 
    catch (IOException ex) 
    { 
     log.error("AddFOUOToReport Filter error: " + ex.getMessage()); 
     response.sendRedirect(loginUrl); 
    } catch (COSVisitorException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } else { 
     chain.doFilter(req, res); 
    } 

} 

public void destroy() {log.info("Inside destroy"); } 

}

запись web.xml:

<!-- BEGIN AddFOUOFilter Changes --> 
<filter> 
    <filter-name>AddFOUO Filter</filter-name> 
    <filter-class>com.jmar.bo.controller.AddFOUOFilterServlet</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>AddFOUO Filter</filter-name> 
    <url-pattern>/cdz/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>AddFOUO Filter</filter-name> 
    <url-pattern>/cdzServlet?getBlob*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>AddFOUO Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<!-- END AddFOUOFilter Changes --> 

Там нет уникального рисунка, чтобы поймать это событие, поэтому я иметь/* в качестве шаблона ,

ответ

0

Если InputStream пуст, что просто означает, что браузер не отправки PDF.

Я предполагаю, что PDF не приходит из браузера, но с сервера ...

+0

Спасибо за быстрый ответ Робина, что является правильным PDF приходит с сервера. Это почти похоже на триггеры фильтра, прежде чем файл будет готов. –

+0

Нет, вы читаете 'InputStream' из' Request', который отправляет браузер. Это неправильный подход. –

+0

Я попробовал обертку объекта ответа, но у меня нет getInputstream. Если я использую сервлет фильтра, запрос на этот фильтр должен иметь правильный файл? Есть ли у вас какие-либо предложения по правильному подходу? Спасибо за ваше время. –

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