0

私の Web アプリケーションは JASPERREPORTS を使用して、さまざまなレポートをコンパイルして提供しています。レポートに表示されるすべての画像は、 ImageServlet から取得されnet.sf.jasperreports.j2ee.servlets.ImageServletます。

<servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/image</url-pattern>
</servlet-mapping>

画像のリクエストは次のようなものです。

GET /watapp/image?rand=0.5039537955900038&image=px

私のアプリケーションのセキュリティ監査では、設定のようにクエリ パラメータを変更 image=pxxxすると 500 内部サーバー エラーが発生することが指摘されました。したがって、この例外を処理する必要があります。

net.sf.jasperreports.engine.JRRuntimeException: Invalid image name: pxxx
        at net.sf.jasperreports.engine.export.JRHtmlExporter.getPrintElementIndex(JRHtmlExporter.java:2408)
        at net.sf.jasperreports.engine.export.JRHtmlExporter.getImage(JRHtmlExporter.java:695)
        at net.sf.jasperreports.j2ee.servlets.ImageServlet.service(ImageServlet.java:98)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.watapp.filters.login.ApplicationFilter.doFilter(ApplicationFilter.java:41)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:662)

私の質問は、この例外をどのように処理できますか? サーブレットは JASPER jar に付属しており、サーブレットのコードを制御することはできません。ご意見をお聞かせください。

4

1 に答える 1

0

/image独自のサーブレットを作成し、jasper サーブレットの代わりにそれを指すように servlet-mapping を変更します。

新しいサーブレットは何もする必要はありません。ジャスパー サーブレットにリクエストを渡すだけで済みますが、例外ハンドラーを挿入してJRRuntimeException.

于 2013-01-22T16:05:01.363 に答える