2014-01-21 62 views
1

我是新手,並尋求一些關於使用符號鏈接訪問Jboss EAP 6.0中的靜態內容的指導。 在我的搜索期間,我找到了Jboss 5/6的解決方案,但是我無法將其映射到我們擁有的EAP版本。訪問Jboss EAP 6.0中的靜態內容

我們的應用服務器上有1000多個PDF文件,用戶可通過Web應用訪問它。 在EAP 6.0中,當在部署的耳朵/戰爭中創建符號鏈接時,無法從Web瀏覽器訪問PDF。

如果有人曾經這樣做過,或者對EAP有何建議,請告訴我們。

感謝您的幫助。

回答

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上下文初始化參數:

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