我需要限制嵌入式Jetty中包含servlet的“插件”WAR文件的文件权限。为了测试文件权限,我创建了一个包含这个servlet的WAR,它尝试写入webapps文件夹之外的文件:
public class Test extends HttpServlet
{
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
try
{
FileWriter outFile = new FileWriter("C:\\temp\\test.txt");
PrintWriter out = new PrintWriter(outFile);
out.println("This is line 1");
out.println("This is line 2");
out.close();
response.getWriter().print("File created");
}
catch(Exception e)
{
response.getWriter().print(e.getMessage());
e.printStackTrace();
}
}
}
然后将包含此servlet的WAR添加到具有已配置文件权限的嵌入式Jetty处理程序中,如下所示:
jetty = new Server(serverPort);
handlers = new HandlerList();
...
(adding standard Web Apps here)
...
WebAppContext plugin = new WebAppContext();
//Create file permissions policy
PermissionCollection pcol = new Permissions();
FilePermission fp = new FilePermission(path_to_war, "read");
pcol.add(fp);
plugin.setPermissions(pcol);
plugin.setContextPath("/plugins/plugin_name");
plugin.setWar(path_to_war);
plugin.setCopyWebDir(false);
plugin.setCopyWebInf(false);
plugin.setExtractWAR(false);
handlers.addHandler(plugin);
jetty.setHandler(handlers);
jetty.start();
然而,servlet仍然能够创建和写入测试输出文件 - 我不确定为什么......我搜索了为单个Web应用程序实现特定权限的示例代码,但发现的信息非常少这个话题。我最好的猜测是WebAppContext从嵌入应用程序“继承”文件权限策略。
有人能指出我正确的方向吗?谢谢!