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-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
部分) 内。
如果您仍然遇到问题,请尝试:
- 检查您是否正在编辑正确的 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、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST 或 ALL)中增加日志级别(
INFO
-> FINE
/ ) ,重新启动 Tomat 并检查日志,FINEST
logging.properties
log4j.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
.