Программно получить ограничения безопасности из web.xml

Есть ли возможность получить список ограничений из web.xml?

 <security-constraint>
    <web-resource-collection>
        <web-resource-name>admin</web-resource-name>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
 </security-constraint>

Еще лучше, есть ли программный способ добавить новые ограничения?

Спасибо Виктор

2 ответа

Решение

Если у тебя есть ServletContainerInitializer в своем onStartup() метод, вы в основном будете делать то, что делает ваш контейнер, когда он анализирует ваш web.xml. Например:

@Override
public void onStartup(Set<Class<?>> classes, ServletContext ctx) throws ServletException {
    ServletRegistration.Dynamic servlet = ctx.addServlet("myServlet", "com.package.myServlet"); // loop through classes set to find all your servlets
    HttpConstraintElement constraint = new HttpConstraintElement(); // many constructors with options
    ServletSecurityElement securityElement = new ServletSecurityElement(constraint); // many different constructors
    servlet.setServletSecurity(securityElement);
}

В конструкторах, которые я прокомментировал, есть много опций для всех видов конфигураций, даже через аннотации безопасности сервлета 3.0. Я позволю вам открыть их всех.

Что касается добавления новых ограничений после инициализации, Javadoc для setServletSecurity() говорит:

* @throws IllegalStateException if the {@link ServletContext} from
* which this <code>ServletRegistration</code> was obtained has
* already been initialized

Я не смог ничего найти для получения списка ограничений через ServletContext интерфейс, но вы всегда можете разобрать web.xml самостоятельно.

В Servlet 3.0 для дескрипторов аннотаций и развертывания нет упоминаний о добавлении новых security-constraints программно. Поэтому я сомневаюсь, что вы можете добавить защитные ограничения программно.

Другие вопросы по тегам