如何修复的访问请求的资源,这已被拒绝在Tomcat?
-
22-09-2019 - |
题
我想启用形式基于身份验证通过使用数据库作为的领域,但我总是得到这一信息,每当我试图认定为Tomcat经理在Tomcat6.我已经创建了一个表用户名和user_roles和映射的用户名(蓝色)管理和管理的作用user_roles表在mysql,但我仍然无法进行验证。我已经重建领域中的标记 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"
/>
任何人都可以请告诉我怎么了我做的,以及如何启用的形式基于身份验证通过使用数据库?
我已经宣布的户"蓝色"为这两个管理员和管理,并且当我试图登录在tomcat管理网页,这是给予我的信息:
HTTP状态403-访问请求的资源已被拒绝
当我输入错误用户名和密码,tomcat再次要求用户名和密码,而不是显示这一信息。
解决方案
我还没有尝试过这个我自己。你可以尝试改变授权方法 TOMCAT_HOME_DIR\webapps\manager\WEB-INF\web.xml
来点的授权的方法设定的形式。领土名称并不重要。
<login-config> <auth-method>FORM</auth-method> <realm-name>Tomcat Manager Application</realm-name> </login-config>
也只是确认-你必须保持只有一个领域中的server.xml,评论了默认之一。
其他提示
HTTP状态403(访问请求的资源已被否认)可能表明要么你键入的太多的不正确的凭据,或者你一些问题与你的配置。
一个可能的问题可能是你的浏览器就能有你的身份验证的凭据的高速缓存,因为与基本的认证,你的浏览器将只提示你凭证你第一次进行身份验证你的网站。后一个成功的身份验证,它将不会提示你一次,并迫使浏览器提示你一次,有时候你需要完全关闭了浏览器(或尝试与另一个网络浏览器)。
如果你没有改变任何结构的文件,请查看文件 conf/tomcat-users.xml
在你安装(locate tomcat-users.xml
).该文件必须包含的凭据,以让你用Tomcat webapp.
例如,增加的经理-gui作用的一个用户名叫 tomcat
有一个密码的 s3cret
, 添加以下的配置文件上所列:
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
然后你可以接你的webapp经理 /manager/html
(例如重装后配置的变化)。
详细阅读: 管理应用程序如何
如果你试图实现自己的安全约束(在 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>
登录-config元素包含的
auth-method
元,其指定的认证方法,我们使用的,这是BASIC
.的security-constraint
元件中含有3个要素:web-resource-collection
,auth-constraint
, ,user-data-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
->FINE
/FINEST
)在logging.properties
或log4j.properties
(细信息,严重警告,信息、配置、精细的,最好的或所有),重新启动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 -vv http://example.com:8983/solr/
通常请求的回应 HTTP/1.1 401Unauthorized 和"WWW-Authenticate"标题应说明 基本的 认证是必需的。
有凭据:
$ curl -vv -u tomcat:tomcat http://example.com:8983/solr/
请求应发送与"授权"标题,它应该进行认证。如果您的凭证都是无效的,应获得: HTTP/1.1 401Unauthorized.如果用户进行身份验证,但是没有权查看的资源应获得: HTTP/1.1 403禁止.
也许用户锁定机制已经被启动了 太多的失败证尝试 (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
.
你需要定义的另一个用户角色命名为'tomcat'并使用户"蓝色"的成员,这个小组。
你可以改变名称的角色组需要通过这个制约因素web.xml 文件:
<auth-constraint>
<role-name>tomcat</role-name>
</auth-constraint>
我得到了同样的错误",HTTP状态403-访问请求的资源已被拒绝",,而不是弹出式窗口,当我使用基本的认证。我用了我自的作用(myname),但它没有工作。因此,我设置的作用(管理-gui)和分配的用户名和密码。在设定之后我得需要的结果。使用管理-gui作为一个角色,然后再试一次。