之前一直都没了解过Tomcat的安全策略, 一直到一天, 我把在window下开发好的工程, 直接复制到公司测试环境(Redhat + Apache tomcat 6.0.26.tar.gz版)能正常运行, 而拖到虚拟机里的Ubuntu(sudo apt-get install tomcat6)里运行,发现servlet跑不起来。。 其中的Exception包括: javax.servlet.ServletException java.lang.ExceptionInInitializerError org.hibernate.cfg.Configuration.(Configuration.java:120) java.security.AccessControlException: access denied (java.util.PropertyPermission org.apache.commons.logging.LogFactory.HashtableImpl read)一下给搞蒙了,以为是漏了jar包, 发现一模一样,没少传, 再仔细看第一次运行的时候的报错信息, 找出了一点腻端,发现跟security策略有关, 于是打开tomcat服务启动文件/etc/init.d/tomcat6, 发现有一个跟安全配置相关的语句:TOMCAT6_SECURITY=yes 抱着试试看的态度,把它注释掉, 重启tomcat,居然能正常跑起来了。 于是google一番tomcat security配置, 找到原来在tomcat/policy.d/下有一系列的策略文件, 在里面给工程下的WEB-INF/classes和WEB-INF/lib目录添加上所有权限即可解决问题。 我的解决步骤如下: 1、把工程放到/var/lib/tomcat/webapps/下(自己修改server.xml设置Context虚拟目录也是一样); 2、修改tomcat/policy.d/50local.policy文件, 在最后添加上: // The permissions granted to the context WEB-INF/classes directory // The permissions granted to the context WEB-INF/lib directory 3、重启tomcat,工程顺利跑起来了。 links:http://hi.baidu.com/lane727/blog/item/4a7275d161331938970a16cc.html |