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

问题描述

| 嗨, 我当前正在使用struts 1运行一个tomcat实例,并且我希望tomcat能够检测到URL中是否请求了pdf文件(例如,链接::0ѭ)。 此时,我希望实例化一个Java类,然后使用pdf API将密码注入文件。这里的主要要点是,我不想将密码存储在要提供的原始pdf文件中,而是希望由Tomcat在运行时注入密码。 如果您有任何想法,请告诉我,我做了一些研究,发现了tomcat过滤器,但不确定是否可以解决此问题。 请注意,密码存储在数据库表中。 谢谢     

解决方法

        从过滤器中,我们调用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
        }
}
    ,         创建一个servlet 将url-pattern设置为* .pdf 每当您的pdf网址被调用时,都会执行servlet。 作为响应,在将PDF返回给用户之前,请从servlet做任何您想做的事情。     ,        写一个“ 2”来拦截所有返回PDF的请求应该是相当简单的。 Filter的doFilter()方法可以访问请求和响应,因此您可以根据需要进行修改。     ,        筛选器不是解决此特定问题的方法。筛选器允许您修改请求,并使请求重定向或重新分配到其他servlet。但是它们不允许您重写响应正文。据我了解,这就是您要尝试做的。 您将必须在Servlet中修改PDF文件,如@Aardvocate的答案所述。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...