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

概述: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;

	@Override
	public 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 successfully
		
		PrintWriter 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权威指南书。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值