如何修复对Tomcat中被拒绝的请求资源的访问?

时间:2010-03-25 06:09:02

标签: tomcat authentication configuration http-status-code-403 catalina

我想通过使用数据库作为域来启用基于表单的身份验证,但每当我尝试在Tomcat 6中作为Tomcat管理器进行身份验证时,我总是收到该消息。我已经创建了一个表user_name和user_roles并映射了用户名(蓝色) )管理员和经理作为mysql中user_roles表中的角色,但我仍然无法进行身份验证。我已在server.xml文件中重新创建了realm标记:

 <Realm className      = "org.apache.catalina.realm.JDBCRealm"
        debug          = "99" 
        driverName     = "com.mysql.jdbc.Driver"
        connectionURL  = "jdbc:mysql://localhost:3306/mail" 
        connectionName = "root" 
        userTable      = "users"
        userNameCol    = "user_name"
        userCredCol    = "user_pass"
        userRoleTable  = "user_roles" 
        roleNameCol    = "role_name" 
 /> 

有谁能告诉我我在做什么,以及如何使用数据库启用基于表单的身份验证?

  1. 我已将用户“蓝色”声明为管理员和经理,当我尝试登录tomcat管理器页面时,它正在向我发送消息:

      

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

  2. 当我输入错误的用户名或密码时,tomcat会再次询问用户名和密码,而不是显示该消息。

4 个答案:

答案 0 :(得分:3)

HTTP状态403(已拒绝访问所请求的资源)可能表示您键入了太多不正确的凭据,或者您的配置存在问题。

一个可能的问题可能是您的浏览器可能会缓存您的身份验证凭据,因为使用BASIC身份验证时,您的浏览器只会在您第一次对您的网站进行身份验证时提示您输入凭据。验证成功后,它不会再次提示您并强制您的浏览器再次提示您,有时您需要完全关闭浏览器(或尝试使用其他Web浏览器)。

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

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

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

然后,您可以从/manager/html访问您的网络应用管理员(例如,在配置更改后重新加载)。

了解详情:Manager App HOW-TO

如果您正在尝试实施自己的安全约束(在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>
  

login-config元素包含auth-method元素,该元素指定我们使用的身份验证方法,即BASICsecurity-constraint元素包含3个元素:web-resource-collectionauth-constraintuser-data-constraint。 web-resource-collection指定需要身份验证的应用程序部分。 /*表示整个应用程序需要身份验证。 auth-constraint指定用户访问受保护资源所需的角色。用户数据约束的传输保证可以是NONECONFIDENTIALINTEGRAL。我们将其设置为NONE,这意味着当您尝试点击受保护资源时,不需要重定向到SSL

还要确保你排队:

<Realm className="org.apache.catalina.realm.MemoryRealm" />

conf/server.xmlEngine部分)内。

如果您仍有问题,请尝试:

  • 检查您是否正在编辑正确的XML文件,
  • 验证您的XML文件,例如catalina.sh configtestxmlstarlet val /etc/tomcat?/*.xml /var/lib/tomcat7/webapps/*/WEB-INF/*.xml
  • 您的<url-pattern>匹配<security-constraint>或设置为/*
  • 检查您的Tomcat日志(例如/var/log/tomcat7),
  • INFOFINE
  • increase logging levelFINEST - &gt; logging.properties / log4j.properties}(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日志记录系统时,请确保initialized it properly将libs和log4j.properties放入正确的文件夹并进行配置,
  • 使用cURL测试BASIC身份验证:

    • 没有凭据:

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

      通常请求应返回 HTTP / 1.1 401 Unauthorized ,而“ WWW-Authenticate ”标头应指示 Basic 身份验证是必需的。

    • 凭据:

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

      请求应与“授权”标头一起发送,并且应该进行身份验证。如果您的凭据无效,您应该: HTTP / 1.1 401 Unauthorized 。如果用户已通过身份验证,但无权查看您应获取的资源: HTTP / 1.1 403 Forbidden

  • 可能已激活用户锁定机制too many failed authentication attemptsLockOutRealm),

  • 手动停止并运行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
    

    debug mode

    $ JPDA_SUSPEND=y catalina.sh jpda start
    

    并检查您的catalina.out日志。

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

答案 1 :(得分:2)

我自己没试过。您可以尝试更改TOMCAT_HOME_DIR\webapps\manager\WEB-INF\web.xml中的auth方法,将auth方法设置为FORM。领域名称并不重要。

<login-config>   <auth-method>FORM</auth-method>   <realm-name>Tomcat Manager Application</realm-name> </login-config>

还要确认 - 您必须在server.xml中只保留一个Realm,注释掉默认值。

答案 2 :(得分:0)

您需要定义另一个名为“tomcat”的用户角色,并使用户“blue”成为该组的成员。

您可以在web.xml文件中更改此约束所需的角色组名称:

<auth-constraint>
    <role-name>tomcat</role-name>
</auth-constraint>

答案 3 :(得分:0)

我收到了相同的错误&#34; HTTP状态403 - 当我使用BASIC身份验证时,我已拒绝访问所请求的资源&#34;,而不是弹出窗口。我使用了我的自定义角色(myname) )但它没有奏效。所以,我将角色设置为(manager-gui)并为其分配了用户名和密码。设置后,我得到了所需的结果。使用manager-gui作为角色,然后再试一次。