tomcat启动后tomcat-users.xml丢失问题解决办法

        tomcat启动后,发现网页无法打开,查看tomcat进程发现进程在,又查看tomcat启动日志显示正常启动,各种可能情况排查一遍后,发现tomcat-users.xml文件大小为零-----tomcat启动后tomcat-users.xml内容丢失了。把tomcat-users.xml重新拷贝过来,重启tomcat,问题解决了。但是tomcat-users.xml为什么会内容丢失那?

         这个问题很久之前就出现过,之前感觉就是tomcat 的bug,偶尔遇到并不是常态,所以也没太关注,但最近一周连续出现了两次,领导开催了必须得有个解决办法,看来是得深入研究下啦!

         网络上搜索了一下相关内容,发现这篇博客http://blog.csdn.net/spy2000/article/details/3891059     说的也是内容丢失的问题,他的结论是:将Tomcat6解压缩后,要将tomcat-users.xml文件<tomcat-users>标签内容里的注释符号删除,否则一旦运行,该标签内被注释的内容将被清空。这篇博客讲的是常态问题,丢失的内容只是<tomcat-users>标签里面的内容,而不是整个tomcat-users.xml里面的内容,作者没有深入研究为什么标签内有注释标签中内容就会丢失。

        搜索了小半天发现网络上没有我这个情况,没办法只能先自已思考一下了。

        先来个测试,在tomcat-users.xml里面加入一些空行,重启tomcat后发现tomcat-users.xml文件里面的空行没了,说明tomcat重启时重写了tomcat-users.xml文件,于是想了一个办法,把tomcat-users.xml文件的权限改成只读文件不就行了,于是chmod 444 (linux下)权限设成-r--r--r--,满怀希望的重启tomcat,结果发现我想多了,tomcat-users.xml文件权限又恢复成了-rw-r--r--,tomcat-users.xml文件还是被重写了。

        看来得搞清楚tomcat加载tomcat-users.xml文件逻辑才行,搜索了一下发现是这样的:

         tomcat启动的时候:
         1、首先读取conf/tomcat-users.xml
         2、然后将tomcat-users.xml文件中的内容写到一个新的文件tomcat-users.xml.new 中
         3、最后将tomcat-users.xml.new 文件重命名为tomcat-users.xml

        看来我这里遇到的问题应该是tomcat在写tomcat-users.xml.new里出错,内容没有写入,这个是非常态问题,偶尔遇到一次也是没有办法的(那个仁兄如果知道问题所在烦请告知一下,不胜感激!)

         当然这样是没法跟领导交差的!

         只能去想想tomcat加载tomcat-users.xml为什么要这么做?可不可以不这么做?带着这个问题无奈之下查看了tomcat的官方文档,终于查到了端倪所在:

         http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html#UserDatabase_Resources

         在讲解UserDatabase Resources一节中讲到:

modify $CATALINA_BASE/conf/server.xml to create the UserDatabase resource based on your XMl file. It should look something like this:

		
	
<Resource name="UserDatabase"
          auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml"
          readonly="false" />

		
The pathname attribute can be absolute or relative. If relative, it is relative to $CATALINA_BASE.

The readonly attribute is optional and defaults to false if not supplied. If the XML is writeable then it will be written to when Tomcat starts. WARNING: When the file is written it will inherit the default file permissions for the user Tomcat is running as. Ensure that these are appropriate to maintain the security of your installation.



          tomcat-users.xml这个文件默认是非只读的,这种情况下这个文件在tomcat启动时会被重写,这种设置只要是在安全方面考虑的。如果不想tomcat这样做可以设置readonly为true。

         赶紧测试一下,发现readonly为true后,tomcat果然不重写tomcat-users.xml文件,不重写当然也不会出意外造成内容丢失啦!问题解决!

         具体修改位置,在conf/server.xml文件中找到GlobalNamingResources容器配置,在Resource中加入readonly="true",如下:

  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" readonly="true"/>
  </GlobalNamingResources>


 

        

 

        

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值