利用Tomcat catalina.policy实现禁止文件读写demo(window版)

来源:互联网 发布:阿里云服务器视频教程 编辑:程序博客网 时间:2024/05/16 23:46

概述:java必用的服务器应该就是tomcat,tomcat涉及内容很多,今天利用catalina.out实现禁止文件读写demo。

1、先决条件

安装好JDK(笔者JDK 1.8)

安装好tomcat(笔者tomcat 7.0)

2、思路

写一个servlet放置到webapps/ROOT目录下, 大家都知道ROOT是tomcat的默认应用。然后网页请求,转发servlet 在ROOT目录写入一个test.txt文件。

这里涉及 catalina.policy

3、开始写servlet代码

import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.GenericServlet;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class WriteFileServlet extends GenericServlet{/** *  */private static final long serialVersionUID = 4362300269424935465L;@Overridepublic void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {//Try to open a file and write to it
//这里注意换成你tomcat安装根目录String catalinaHome = "D:/install/apache-tomcat-7.0.78-windows-x64/apache-tomcat-7.0.78";  File testFile = new File(catalinaHome+"/webapps/ROOT","test.txt");FileOutputStream fileOutputStream = new FileOutputStream(testFile);fileOutputStream.write(new String("testing..\n").getBytes());fileOutputStream.close();// If we get down this far, the file was created successfullyPrintWriter out = response.getWriter();out.println("File created successfully!");}}

如果写入成功会打印“File created successfully!”

4、在%CATALINA_HOME%/webapps/ROOT/WEB-INF/   下创建一个classes目录 等会放置编译class文件

5、编译servlet代码

javac -classpath %CATALINA_HOME%/lib/servlet-api.jar -d %CATALINA_HOME%/webapps/ROOT/WEB-INF/classes WriteFileServlet.java

%CATALINA_HOME% 表示引用tomcat根目录

-classpath 表示依赖编译jar包

-d :表示编译文件放置位置

WriteFileServlet.java  表示编译的类  (表示cmd 切换到WriteFileServlet.java目录下)

6、配置web.xml文件%CATALINA_HOME%\webapps\ROOT\WEB-INF\目录下, 就是配置刚才编译的servlet

<servlet><servlet-name>writefile</servlet-name><servlet-class>WriteFileServlet</servlet-class></servlet><servlet-mapping><servlet-name>writefile</servlet-name><url-pattern>/writefile</url-pattern></servlet-mapping>


7、启动Tomcat服务器,这是注意带-security参数(表示安全模式启动,也就是会用到catalina.policy)

manager 和host-manager会报错,不要管它

catalina  start -security


8、打开浏览器验证下(注意这里还没有设置catalina.policy,没有设置表示禁止的)

键入如下网址:

http://localhost:8080/writefile



9、修改catalina.policy文件

追加如下内容:

grant codeBase "file:${catalina.home}/webapps/ROOT/-" {permission java.io.FilePermission "${catalina.home}/webapps/ROOT/test.txt","read,write,delete";};

permission java.io.FilePermission  :表示FIle IO流权限

"${catalina.home}/webapps/ROOT/test.txt" : 表示操作具体文件

”read,write,delete" : 文件操作动作是允许的

保存之后,重启tomcat ,注意带-security参数


如果你想要默认就是安全方式启动,也就是去掉-security参数,你可以在catalina.bat文件前面设置JAVA_OPTS参数

set JAVA_OPTS="-Djava.security.manager -Djava.security.policy=%CATALINA_HOME%/conf/catalina.policy"   (注意前面设置)



当然tomcat.policy 的规则不止这个,还有很多其他,这只是抛砖引玉。

参考:tomcat权威指南书。

阅读全文
0 0
原创粉丝点击