6

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

 <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

4 回答 4

3

我自己没有试过这个。您可以尝试更改 auth-method 以TOMCAT_HOME_DIR\webapps\manager\WEB-INF\web.xml将 auth-method 设置为 FORM。领域名称无关紧要。

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

也只需确认 - 您必须在 server.xml 中只保留一个领域,注释掉默认的领域。

于 2010-03-25T09:59:54.470 回答
3

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

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

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

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

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

然后您可以访问您的 webapps 管理器/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指定我们使用的身份验证方法的元素,即BASIC. 该security-constraint元素包含 3 个元素:web-resource-collectionauth-constraintuser-data-constraint。web-resource-collection 指定了我们应用程序中需要身份验证的部分。/*表示整个应用程序需要身份验证。auth-constraint 指定用户需要具有的角色才能访问受保护的资源。用户数据约束的传输保证可以是NONE,CONFIDENTIALINTEGRAL. 我们将其设置为NONE,这意味着SSL当您尝试访问受保护的资源时不需要重定向到。

还要确保你有线:

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

在您的conf/server.xml(Engine部分) 内。

如果您仍然遇到问题,请尝试:

  • 检查您是否正在编辑正确的 XML 文件,
  • 验证您的 XML 文件,例如,catalina.sh configtestxmlstarlet val /etc/tomcat?/*.xml /var/lib/tomcat7/webapps/*/WEB-INF/*.xml
  • 您的<url-pattern>匹配项<security-constraint>或设置为/*,
  • 检查您的 Tomcat 日志(例如/var/log/tomcat7),
  • 在或(INFO、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST 或 ALL)中增加日志级别INFO-> FINE/ ) ,重新启动 Tomat 并检查日志,FINESTlogging.propertieslog4j.properties
  • 如果日志中没有任何内容,请检查您是否正在检查正确的日志 ( 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 测试 BASIC 身份验证:

    • 没有凭据:

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

      通常请求应返回HTTP/1.1 401 Unauthorized并且“ WWW-Authenticate ”标头应指示需要基本身份验证。

    • 有凭据:

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

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

  • 可能由于身份验证尝试失败次数过多LockOutRealm)而激活了用户锁定机制,

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

于 2015-04-09T22:37:45.380 回答
0

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

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

<auth-constraint>
    <role-name>tomcat</role-name>
</auth-constraint>
于 2011-05-24T14:41:45.560 回答
0

当我使用 BASIC 身份验证时,我得到了同样的错误“HTTP 状态 403 - 对请求的资源的访问被拒绝”,而不是弹出窗口。我使用了我的自定义角色(我的名字),但它没有工作。所以,我将角色设置为(manager-gui)并为其分配了用户名和密码。设置后我得到了所需的结果。使用 manager-gui 作为角色,然后重试。

于 2014-06-24T05:59:46.737 回答