Friday, October 05, 2012

Динамическая конфигурация Java Security Policy в Jetty

Задача

В рамках моего веб приложения надо умудриться задеплоить еще один war, на котором будет работать какой-то сервлет. Поскольку этот war - это стороннее веб приложение, то надо запретить ему доступ к файловой системе, открытие сокетов и тем более вызывать System.exit.
Подобная задача легко решается в OSGi контейнере (пример на OSGi тут). Но у меня Jetty и необходимо очень тупое простое решение.

Предположим в этом "левом" веб-приложении какой-нибудь умник решил проверить систему на прочность и написал такой код:

Естественно, что при вызове сервлета  System.exit сделает свое дело и погасит мой сервер.

Деплоим стороннее веб приложение

Прежде всего надо убедиться, что модули jetty-webapp и jetty-server подключены к проекту. У меня версия Jetty 8.1.3.v20120416



Дальше пишем код деплоймента веб архива в Jetty

Если задеплоить этот код в любой web container, то как только мы дернем страничку из браузера, то все...

Настраиваем Java security manager

Самый тупой способ, который я нашел - это подставить свою реализацию java.security.policy:
Надо обратить внимание на, что Policy надо устанавливать ДО того, как переопределить SecurityManager, иначе не хватит прав для установки новой Policy :)

No comments:

Post a Comment