Программно получить ограничения безопасности из 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
программно. Поэтому я сомневаюсь, что вы можете добавить защитные ограничения программно.