访问Jboss EAP 6.0中的静态内容

时间:2014-01-21 15:05:47

标签: jboss7.x jboss-eap-6

我是新手,并寻求使用符号链接访问Jboss EAP 6.0中的静态内容的一些指导。 在我搜索期间,我找到了Jboss 5/6的解决方案,但是我无法将其映射到我们拥有的EAP版本。

我们的应用服务器上有1000多个PDF,用户可以通过Web应用程序访问它。 在EAP 6.0中,在已部署的ear / war中创建符号链接时,无法从Web浏览器访问PDF。

如果有人之前已经这样做过,或者对EAP的建议有任何建议,那么请告诉我们。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

简答:创建一个知道从哪里获取这些文件并让它们为它们提供服务的servlet。

更长的版本/说明:

创建一个servlet,将其映射到例如/yourapp/pdfs/*

@WebServlet("/pdfs/*")
public class PdfServlet extends HttpServlet
{
    public void doGet(HttpServletRequest req, HttpServletResponse res) {
        String basePath = getServletContext().getInitParameter("basePath");
        File f = new File(basePath + File.separator + req.getPathInfo());
        /////////////////////////////////////////////////////////////////////
        ////  BIG WARNING:                                               ////
        ////  Normalize the path of the file and check if the user can   ////
        ////  legitimately access it, or you created a BIG security      ////
        ////  hole! If possible enhance it with system-level security,   ////
        ////  i.e. the user running the application server can access    ////
        ////  files only in the basePath and application server dirs.    ////
        /////////////////////////////////////////////////////////////////////
        if( f.exists() ) {
            OutputStream out = res.getOutputStream();
            // also set response headers for correct content type
            // or even cache headers, if you so desire
            byte[] buf = new byte[1024];
            int r;
            try( FileInputStream fis = new FileInputStream(f) ) {
                while( (r=fis.read(buf)) >= 0 ) {
                    out.write(buf, 0, r);
                }
            }
        }
        else res.sendError(HttpServletResponse.SC_NOT_FOUND);
    }
}

上面的代码可能会进行一些调整,但通常会概述解决方案......

现在在web.xml中指定上下文init参数:

<context-param>
    <param-name>basePath</param-name>
    <param-value>/the/path/to/the/pdfs</param-value>
</context-param>