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

zc0qhyus  于 2023-04-30  发布在  其他
关注(0)|答案(4)|浏览(181)

我目前正在使用struts 1运行一个tomcat示例,我希望tomcat能够检测到URL中请求的pdf文件(例如链接:http://www.***.com/files/action=download&name=myreport.pdf)。
此时,我希望示例化一个java类,然后使用pdf API向文件注入密码。这里的要点是,我不想让密码存储在原始的pdf文件中,我服务,而不是我希望密码在运行时注入Tomcat。
请让我知道,如果你有任何想法,我做了一点研究,我遇到了tomcat过滤器,但我不确定这是否会解决这个问题。
请注意,密码存储在数据库表中。
谢谢

mgdq6dx1

mgdq6dx11#

我们从过滤器中调用一个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
        }
}
iyfjxgzm

iyfjxgzm2#

1.创建servlet
1.将url-pattern设置为 *。PDF
1.无论何时调用您的pdf url,都会执行servlet。
1.在将PDF返回给用户作为响应之前,从servlet执行任何您想要的操作。

uz75evzq

uz75evzq3#

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

aelbi1ox

aelbi1ox4#

过滤器不是解决这个问题的方法。过滤器允许您修改请求,并使它们被重定向或重新分派到不同的servlet。但是它们不允许你重写响应体。据我所知,这就是你想要做的。
您必须在Servlet中修改PDF文件,如@Aardvocate的回答中所述。

相关问题