概述: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权威指南书。