Terminal 401登录Tomcat的Manager应用程序时出现未经授权的错误

Terminal 401登录Tomcat的Manager应用程序时出现未经授权的错误,terminal,osx-lion,tomcat7,manager-app,Terminal,Osx Lion,Tomcat7,Manager App,我正在尝试登录Mac OS X 10.7的Tomcat 7.0.22中的Manager应用程序。以下是我得到的错误: 401未经授权 您无权查看此页面。如果尚未更改任何配置文件,请检查安装中的conf/tomcat-users.xml文件。该文件必须包含允许您使用此webapp的凭据。 例如,要向名为tomcat、密码为s3cret的用户添加manager gui角色,请将以下内容添加到上面列出的配置文件中。 我已经在tomcat-users.xml中添加了这个,但它仍然不使用相同的用户名/密

我正在尝试登录Mac OS X 10.7的Tomcat 7.0.22中的Manager应用程序。以下是我得到的错误:

401未经授权
您无权查看此页面。如果尚未更改任何配置文件,请检查安装中的conf/tomcat-users.xml文件。该文件必须包含允许您使用此webapp的凭据。
例如,要向名为tomcat、密码为s3cret的用户添加manager gui角色,请将以下内容添加到上面列出的配置文件中。
我已经在tomcat-users.xml中添加了这个,但它仍然不使用相同的用户名/密码

<tomcat-users>
<role rolename="manager-gui"/>
<user name="tomcat" password="s3cret" roles="standard,manager-gui"/>
</tomcat-users>

对不起,我不得不问一个显而易见的问题:你重启Tomcat了吗

如果不起作用,请尝试将“管理gui”添加到您的角色:

<user name="tomcat" password="s3cret" roles="admin-gui,standard,manager-gui"/>


我得到了完全相同的错误,在我将连接器端口从8080更改为8081后,它才开始工作。

好的,我也有这个错误。找不到bug,找不到bug,找不到bug。我的“tomcat用户”块就是这样的

<tomcat-users>
<role rolename="manager-gui"/>
<user name="tomcat" password="s3cret" roles="standard,manager-gui"/>
</tomcat-users>

终于找到了BUG。我一直在XML注释块中编辑XML

<!--
<tomcat-users>
<role rolename="manager-gui"/>
<user name="tomcat" password="s3cret" roles="standard,manager-gui"/>
</tomcat-users>
-->

DOH


因此:不要忘记删除“.”

为了更清楚,以下是您需要添加到您的conf/tomcat-users.xml中的角色,从tomcat 7.x开始。如果您想保留评论,您可以,但这是您所需要的全部(使用admin/admin登录)文件:

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>  
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="manager-jmx"/>
  <role rolename="manager-status"/>
  <role rolename="admin-gui"/>
  <role rolename="admin-script"/>
  <user username="admin" password="admin" roles="manager-gui, manager-script, manager-jmx, manager-status, admin-gui, admin-script"/>
</tomcat-users>

不太可能有人犯了与我相同的错误,但如果您有两个版本的tomcat(或伪造了安装并有需要清理的文件),请确保您位于正确的文件夹中


我在C:\tomcat7\中查看配置文件,但实际运行的Tomcat在C:\Program Files\Apache Software Foundation\tomcat7.0\

检查server.xml中的确切行



Navdeep

我也遇到了这个问题。我的tomcat-users.xml的内容是正确的,但是tomcat无法读取该文件。我将文件组更改为tomcat7,重新启动了Tomcat,瞧

下面是我的tomcat-users.xml的内容:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <user username="admin" password="admin" roles="manager-gui, admin-gui" />
</tomcat-users>


还要确保已正确设置TOMCAT_HOME和JAVA_HOME环境变量。

我尝试在TOMCAT-users.xml中添加用户名作为TOMCAT,该用户名已经是一个角色,但无法工作。 然后我将用户名指定为的管理员,效果很好:) 关闭tomcat

将下面的注释完整粘贴到tomcat-users.xml中并保存

启动雄猫

现在构建它应该可以工作了,我使用Jenkins和git通过tomcat7为windows操作系统进行了构建

<?xml version="1.0" encoding="UTF-8"?>
-<tomcat-users> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <user roles="manager-gui, manager-script, manager-jmx, manager-status, admin-gui, admin-script" password="admin" username="admin"/> </tomcat-users>

-        

在windows中,我为另一个tomcat安装定义了一个CATALINA_HOME环境变量,因此即使我在新安装文件夹中使用启动脚本,该变量也是如此。所以删除CATALINA_家就解决了我的问题

我使用了一个特殊的复杂密码,上面有很多奇怪的字符。只需将其返回到常规密码,即可正常工作。

如果您使用的是Tomcat 8,则可能缺少以下内容。在更新
领域
tomcat users.xml
之后,您还需要编辑应用程序的
context.xml

默认情况下,较新版本的Tomcat将对Manager和Host Manager应用程序的访问限制为来自服务器本身的连接。由于我们是在远程计算机上安装的,您可能需要删除或更改此限制。要更改这些文件的IP地址限制,请打开相应的context.xml文件

对于Manager应用程序:

/webapps/manager/META-INF/context.xml
/opt/tomcat/webapps/host-manager/META-INF/context.xml
对于主机管理器应用程序:

/webapps/manager/META-INF/context.xml
/opt/tomcat/webapps/host-manager/META-INF/context.xml
注释阀门的以下部分,如下所示-

<Context antiResourceLocking="false" privileged="true" >
    <!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
            allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
</Context>


在此之后,您应该已经准备好了。

我遇到了相同的错误,然后在users.xml中更改了密码。问题解决了。如果您使用一些特殊字符,如
&
@
。它不起作用。删除它。

在server.xml中将端口从8080更改为8088对我很有效。请参阅下面的代码

<Connector port="8088" protocol="HTTP/1.1" 
connectionTimeout="20000"
redirectPort="8443" />

在我的例子中,我在
context.xml中有多个
..
部分,我必须将
..
复制并粘贴到每个
..
部分,因为我在这些主机中的每一个都部署了manager应用程序,它们是独立
引擎的一部分

@swapnil chaudhari关于应用程序的
META-INF/context.xml
中的IP地址限制的回答也很有帮助,但是我发现在我的服务器的
server.xml
中覆盖
上下文更有益

最后,我的每个
引擎都有这样的功能:

    <Engine name="CatalinaMyUniqueEngine"
            defaultHost="MyUniqueHost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="MyUniqueHost"
            appBase="/opt/tomcat/webapps/MyUniqueHost"
            unpackWARs="true" autoDeploy="true">
        <Context path="/manager" privileged="true" antiResourceLocking="false"
                 docBase="manager">
          <!-- Wider allowance than the default.
               Or you can remove to allow all IPs, which probably isn't
               a good idea. -->
          <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                 allow="127\.0\.0\.1|10\.244\.\d+.\d+" />
      </Host>
    </Engine>


docBase
是相对于
appBase
的。在
/opt/tomcat/webapps/MyUniqueHost
中,我有一个指向由我的系统包管理器(基于Debian)安装的manager应用程序的符号链接,它位于
/usr/share/tomcat8 admin/manager
。通过这些符号链接,我可以在所有
主机中使用manager应用程序,而无需复制manager应用程序。

只需添加一些关于@David答案的信息:

如果您像me和SFTP一样使用tomcat以外的组(例如root)下的任何用户访问主机,并使用gedit或VS code等通用编辑器编辑
tomcat_users.xml
,则文件组将更改为您使用的用户(可能是因为创建了新文件)。如下图所示:

drwxr-x--- 2 root tomcat   4096 Jun 21 11:41 ./
drwxr-xr-x 9 root tomcat   4096 May 24 14:12 ../
-rw-r----- 1 root tomcat  13531 Apr 28 03:34 catalina.policy
-rw-r----- 1 root tomcat   7202 Apr 28 03:34 catalina.properties
-rw-r----- 1 root tomcat   1400 Apr 28 03:34 context.xml
-rw-r----- 1 root tomcat   1149 Apr 28 03:34 jaspic-providers.xml
-rw-r----- 1 root tomcat   2313 Apr 28 03:34 jaspic-providers.xsd
-rw-r----- 1 root tomcat   3850 Apr 28 03:34 logging.properties
-rw-r----- 1 root tomcat   7511 Apr 28 03:34 server.xml
-rw-r----- 1 root root     2342 Jun 21 11:41 tomcat-users.xml
-rw-r----- 1 root tomcat   2633 Apr 28 03:34 tomcat-users.xsd
-rw-r----- 1 root tomcat 170202 Apr 28 03:34 web.xml
也许我最初对tomcat的设置有点随意。。。但是通过上述行为,tomcat将失去对已编辑文件的访问权。结果将是401未经授权

解决这个问题有很多选择。不过,我不确定其中是否有一种是最佳做法

  • 改变
    <?xml version="1.0" encoding="UTF-8"?>
    <tomcat-users>  
      <role rolename="manager-gui"/>
      <role rolename="manager-script"/>
      <role rolename="manager-jmx"/>
      <role rolename="manager-status"/>
      <role rolename="admin-gui"/>
      <role rolename="admin-script"/>
      <user username="abc" password="xyz" roles="manager-gui, manager-script, manager-jmx, manager-status, admin-gui, admin-script"/>
    </tomcat-users>
    
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                   resourceName="jdbc/myapp"/>
    
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                   resourceName="UserDatabase"/>