我编写了一个Tomcat应用程序,该应用程序提供位于网络(域)目录中的pdf。它可以在我的本地笔记本电脑上运行但是当我将它部署到tomcat服务器(作为服务安装)时,我得到Access被拒绝。帮助台确实设置了具有读取和执行权限的共享目录,其中包含运行Tomcat的服务器名称,但它仍然无效。它在我的笔记本电脑上工作,因为我登录到域,但由于Tomcat作为服务运行,我认为没有处理身份验证,但我认为授予Tomcat服务器的权限将解决这个问题。 Tomcat服务器和共享目录都在同一个域中。还有其他人遇到过这个问题吗?
帮助台说他们可以设置我可以登录的服务帐户,但我不知道如何在我的应用程序中对其进行编码。
错误:
java.io.FileNotFoundException: \\server\directory\file.pdf (Access is denied)
java.io.FileInputStream.open(Native Method)
java.io.FileInputStream.<init>(Unknown Source)
com.strateproc.controller.LoadPDFServlet.doPost(LoadPDFServlet.java:58)
javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
的Servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int processID = Integer.parseInt(request.getParameter("processID"));
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
// get filename from process id
Eprocess process = DBMain.getProcessFromId(processID);
// get pdf
String contextPath = PROCESS_DIRECTORY + process.getFileName();
InputStream in = new FileInputStream(contextPath);
// get output steam
OutputStream out = response.getOutputStream();
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
}
答案 0 :(得分:1)
获取帮助台以设置服务帐户,然后配置Tomcat服务(通过提供的控制面板应用程序或通过标准Windows服务控制面板)以该服务登录。
答案 1 :(得分:0)
我有一个系统可以做同样的事情,我们这样做的方式是通过domain\machinename$
以及$之后授予对机器本身的访问权限。这将授予对作为本地系统或网络服务在计算机上运行的每个服务的访问权限。