问题描述
|
嗨,
我当前正在使用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的答案所述。