如何使用Tomcat过滤器保护pdf文件?

时间:2011-05-27 11:57:44

标签: java tomcat passwords servlet-filters protection

HI,

我目前正在运行一个带有struts 1的tomcat实例,我希望tomcat能够检测到URL中请求pdf文件的时间(例如链接:http://www.***.com/files/action=download&name=myreport.pdf)。

此时我想要实例化一个java类,然后使用pdf API我想为文件注入一个密码。这里的要点是我不想在我正在服务的原始pdf文件中使用密码存储,而是希望Tomcat在运行时注入密码。

如果您有任何想法,请告诉我,我做了一些研究,我遇到了tomcat过滤器,但我不确定这是否能解决这个问题。

请注意密码存储在数据库表中。

谢谢

4 个答案:

答案 0 :(得分:2)

从过滤器中我们调用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 :(得分:1)

  1. 创建一个servlet
  2. 将url-pattern设置为* .pdf
  3. 每当调用pdf url时,都会执行servlet。
  4. 在将PDF作为回应返回给用户之前,从servlet中执行任何操作。

答案 2 :(得分:0)

编写Filter来拦截所有返回PDF的请求应该是相当直接的。 Filter的doFilter()方法可以访问请求和响应,因此您可以随意修改它。

答案 3 :(得分:0)

过滤器不是解决此特定问题的方法。过滤器允许您修改请求并使它们被重定向或重新分配到不同的servlet。但是他们不允许你重写响应主体。据我所知,这就是你要做的事情。

您必须在Servlet中进行PDF文件修改,如@ Aardvocate的回答中所述。