如何修复 Tomcat webapp 拒绝访问所请求的资源?

如何修复 Tomcat webapp 拒绝访问所请求的资源?

我已经在计算机上安装了 Tomcat,它运行良好。我可以登录到管理管理器。我已部署一个.war可以在 Tomcat 管理器上查看的文件。文件的名称是shim(实际上我正在安装freeshim)。

当我尝试使用浏览器访问 shim 时,192.168.1.65:8080/shim我得到了一个 Web 管理界面shim。这是我收到的消息:

这是 FreeSHIM 的 Web 管理界面。Web 服务位于“此处”。

当我单击“此处”来配置 Freeshim 时,出现错误:

HTTP 状态 403-访问请求的资源被拒绝。

我哪里做错了?我该如何更改此权限?

答案1

HTTP 状态 403(访问请求的资源被拒绝)可能表明您输入了 3 个以上的错误凭据(请尝试其他 Web 浏览器)或者您的配置存在问题。

如果您未更改任何配置文件,请检查conf/tomcat-users.xml安装中的文件 ( locate tomcat-users.xml)。该文件必须包含允许您使用 Tomcat webapp 的凭据。

例如,要为名为tomcat且密码为的用户添加 manager-gui 角色s3cret,请将以下内容添加到上面列出的配置文件中:

<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>

然后您可以从/manager/html(例如,配置更改后重新加载)访问您的 web 应用程序管理器。

阅读更多:管理应用程序使用方法

如果您尝试实施自己的安全约束(在web.xml),请尝试以下示例(</web-app>结束之前):

<!-- This security constraint protects your webapp interface. -->
<login-config>
  <!-- Define the Login Configuration -->
  <auth-method>BASIC</auth-method>
  <realm-name>Webapp</realm-name>
</login-config>
<security-constraint>
  <web-resource-collection>
    <web-resource-name>Admin</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>*</role-name>
  </auth-constraint>
  <!-- Specifying a Secure Connection -->
  <user-data-constraint>
    <!-- transport-guarantee can be CONFIDENTIAL (forced SSL), INTEGRAL, or NONE -->
    <transport-guarantee>NONE</transport-guarantee>
  </user-data-constraint>
</security-constraint>
<!-- Authorization, see: tomcat-users.xml --> 
<security-role>
  <role-name>*</role-name>
</security-role>

如果问题仍然存在,请尝试:

  • 检查你是否编辑了正确的 XML 文件,
  • 验证你的 XML 文件,catalina.sh configtest例如xmlstarlet val /etc/tomcat?/*.xml /var/lib/tomcat7/webapps/*/WEB-INF/*.xml
  • 您的<url-pattern>匹配项<security-constraint>或设置为/*
  • 检查你的 Tomcat 日志(例如/var/log/tomcat7),
  • 增加日志记录级别INFO-> FINE/ FINESTlogging.propertieslog4j.properties(INFO、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST 或 ALL),重新启动 Tomat 并检查日志,
  • 如果日志中没有任何内容,请检查您是否检查了正确的日志(sudo lsof | grep -E "java.*(out|txt|log)$"tail -f /var/log/tomcat7/*.log /var/log/tomcat7/*.txt /var/log/tomcat7/*.out),
  • 使用log4j日志系统时,请确保正确初始化通过将库log4j.properties放入正确的文件夹并进行配置,
  • 使用 cURL 测试基本身份验证:

    • 无需凭证:

      $ curl -vv http://example.com:8983/solr/
      

      正常情况下请求应该返回HTTP/1.1 401 未授权和“万维网认证“标题应该指示基本的需要身份验证。

    • 凭证:

      $ curl -vv -u tomcat:tomcat http://example.com:8983/solr/
      

      请求应使用“授权”标头发送,并应进行身份验证。如果您的凭据无效,您应该收到:HTTP/1.1 401 未授权如果用户已经通过身份验证,但没有权限查看资源,您应该获得:HTTP/1.1 403 禁止

  • 也许用户锁定机制已被激活身份验证尝试失败次数过多锁定领域),

  • 手动停止并运行 Tomcat (方法与:相同ps wuax | grep ^tomcat),例如:

    # ps wuax | grep ^tomcat
    tomcat7    884  /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties ... org.apache.catalina.startup.Bootstrap start
    $ /etc/init.d/tomcat7 stop
    $ sudo sudo -u tomcat7 /usr/lib/jvm/java-7-openjdk-amd64/bin/java ...  -Dorg.apache.catalina.level=FINEST org.apache.catalina.startup.Bootstrap start
    

    或者开始使用catalina.sh如下脚本:

    $ . /etc/default/tomcat7
    $ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 CATALINA_HOME=/usr/share/tomcat7 CATALINA_BASE=/var/lib/tomcat7 CATALINA_PID=/var/run/tomcat7.pid CATALINA_TMPDIR=/tmp LOGGING_CONFIG="-Dorg.apache.catalina.level=FINEST"
    $ /usr/share/tomcat7/bin/catalina.sh run
    

    或者调试模式

    $ JPDA_SUSPEND=y catalina.sh jpda start
    

    并检查您的catalina.out日志。

  • 最后的手段是通过以下方式调试过程:sudo strace -fp PID

答案2

确保运行 tomcat 的用户可以访问 FreeShim 所在的文件夹。

sudo chmod -R a+rwx < dir of FreeShim >

这对我有用。

相关内容