Мне нужно ограничить права доступа к файлам "подключаемых модулей" WAR, содержащих сервлеты во встроенной Jetty.Чтобы проверить права доступа к файлу, я создал 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();
}
}
}
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();
Однако сервлет все еще может создавать и записывать в тестовый выходной файл - я не уверен, почему ... Я искал пример кода, реализующего специфическийразрешения для отдельных веб-приложений, но нашел очень мало информации по этой теме.Я думаю, что WebAppContext «наследует» политику разрешений файлов от приложения для встраивания.
Может кто-нибудь указать мне правильное направление?Спасибо!