You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat运行报500错误提示index_jsp.class权限被拒绝如何解决

问题根因

该错误属于Linux文件权限不匹配导致的访问失败:Tomcat运行时需要读取JSP编译生成的index_jsp.class文件,但启动Tomcat的系统用户没有该文件以及父级目录的访问权限,哪怕文件物理存在也会抛出权限拒绝类的FileNotFoundException。

完整报错栈
Root Cause
java.io.FileNotFoundException: /opt/tomcat/work/Catalina/localhost/ROOT/org/apache/jsp/index_jsp.class (Permission denied)
    java.io.FileInputStream.open0(Native Method)
    java.io.FileInputStream.open(FileInputStream.java:195)
    java.io.FileInputStream.<init>(FileInputStream.java:138)
    sun.misc.URLClassPath$FileLoader$1.getInputStream(URLClassPath.java:1397)
    sun.misc.Resource.cachedInputStream(Resource.java:77)
    sun.misc.Resource.getByteBuffer(Resource.java:160)
    java.net.URLClassLoader.defineClass(URLClassLoader.java:460)
    java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:129)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:58)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:192)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:413)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
    org.apache.jasper.servlet.JspServlet.init(JspServlet.java:135)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Thread.java:748)
权限核查步骤
  • 第一步查询Tomcat进程的运行用户:执行命令ps aux | grep tomcat,输出结果的第一列即为当前运行Tomcat服务的系统用户,常见值为tomcat、root等。
  • 第二步查询目标class文件的权限归属:执行命令ls -l /opt/tomcat/work/Catalina/localhost/ROOT/org/apache/jsp/index_jsp.class,查看输出中的属主用户、属组以及权限位,确认Tomcat运行用户是否有该文件的读取权限。
  • 第三步逐级核查父目录执行权限:Linux系统下访问目录内的文件需要目录的执行(x)权限,依次执行以下命令确认每一级父目录的权限对Tomcat运行用户开放执行权限:
ls -ld /opt/tomcat/work/
ls -ld /opt/tomcat/work/Catalina/
ls -ld /opt/tomcat/work/Catalina/localhost/
ls -ld /opt/tomcat/work/Catalina/localhost/ROOT/
ls -ld /opt/tomcat/work/Catalina/localhost/ROOT/org/
修复配置方法
  • 方案1(通用稳妥):将整个Tomcat目录的归属修改为Tomcat运行用户,假设查询到的运行用户和用户组都是tomcat,执行命令:chown -R tomcat:tomcat /opt/tomcat/
  • 方案2(仅修改工作目录):如果不需要修改全目录权限,单独修改work目录的归属和权限即可:
chown -R tomcat:tomcat /opt/tomcat/work/
chmod -R u+rwx,g+rwx,o+rx /opt/tomcat/work/
  • 权限修改完成后重启Tomcat服务,重新访问应用即可验证问题是否解决。

内容的提问来源于stack exchange,提问作者Madhavi Thotta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:54:07