我想通过使用数据库作为域来启用基于表单的身份验证,但每当我尝试在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"
/>
有谁能告诉我我在做什么,以及如何使用数据库启用基于表单的身份验证?
我已将用户“蓝色”声明为管理员和经理,当我尝试登录tomcat管理器页面时,它正在向我发送消息:
HTTP状态403 - 拒绝访问所请求的资源
当我输入错误的用户名或密码时,tomcat会再次询问用户名和密码,而不是显示该消息。
答案 0 :(得分:3)
HTTP状态403(已拒绝访问所请求的资源)可能表示您键入了太多不正确的凭据,或者您的配置存在问题。
一个可能的问题可能是您的浏览器可能会缓存您的身份验证凭据,因为使用BASIC身份验证时,您的浏览器只会在您第一次对您的网站进行身份验证时提示您输入凭据。验证成功后,它不会再次提示您并强制您的浏览器再次提示您,有时您需要完全关闭浏览器(或尝试使用其他Web浏览器)。
如果您尚未更改任何配置文件,请检查安装中的文件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"/>
然后,您可以从/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-collection
,auth-constraint
和user-data-constraint
。 web-resource-collection指定需要身份验证的应用程序部分。/*
表示整个应用程序需要身份验证。 auth-constraint指定用户访问受保护资源所需的角色。用户数据约束的传输保证可以是NONE
,CONFIDENTIAL
或INTEGRAL
。我们将其设置为NONE
,这意味着当您尝试点击受保护资源时,不需要重定向到SSL
。
还要确保你排队:
<Realm className="org.apache.catalina.realm.MemoryRealm" />
在conf/server.xml
(Engine
部分)内。
如果您仍有问题,请尝试:
catalina.sh configtest
或xmlstarlet val /etc/tomcat?/*.xml /var/lib/tomcat7/webapps/*/WEB-INF/*.xml
,<url-pattern>
匹配<security-constraint>
或设置为/*
,/var/log/tomcat7
),INFO
或FINE
中FINEST
- &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 attempts(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
。
答案 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作为角色,然后再试一次。