Доступ к статическому контенту в Jboss EAP 6.0

Я новичок и ищу руководство по доступу к статическому контенту в Jboss EAP 6.0 по символическим ссылкам. Во время поиска я нашел решения для Jboss 5/6, однако мне не удалось сопоставить его с имеющейся у нас версией EAP.

На нашем сервере приложений находится более 1000 PDF-файлов, и пользователи могут получить к нему доступ через веб-приложение. В EAP 6.0 при создании символической ссылки внутри развернутого ear/war файлы PDF недоступны из веб-браузера.

Если кто-то делал это раньше или у вас есть предложения о том, как это может быть в EAP, пожалуйста, сообщите нам об этом.

Ценю твою помощь.

1 ответ

Краткий ответ: создайте сервлет, который знает, где взять эти файлы, и пусть он их обслуживает.

Более длинная версия / Объяснение:

Создайте сервлет, сопоставьте его, например, с /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:

<context-param>
    <param-name>basePath</param-name>
    <param-value>/the/path/to/the/pdfs</param-value>
</context-param>
Другие вопросы по тегам