Как программно настроить <security-constraint> в Servlets 3.x?
В моем текущем веб-приложении я пытаюсь избавиться от web.xml, и я не смог правильно настроить ограничение безопасности, которое заставляет все запросы к приложению использовать HTTPS.
<security-constraint>
<web-resource-collection>
<web-resource-name>all</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Как включить приведенный выше фрагмент конфигурации web.xml в код конфигурации сервлета 3.x, который делает то же самое?
UPDATE
Я хочу, чтобы ограничение применялось к каждому сервлету, фильтру и статическому ресурсу в приложении, примеры, которые я видел в Интернете, пока показывают, чтобы привязать ограничение безопасности к сервлету, но я хочу, чтобы ограничение безопасности было прикреплено к веб-приложению, В фрагменте xml выше вы видите, что он не ссылается ни на какой конкретный сервлет
Ответы
Ответ 1
Я считаю, что вы ищете аннотацию @ServletSecurity
@WebServlet(urlPatterns = "/*")
@ServletSecurity(value = @HttpConstraint(transportGuarantee = TransportGuarantee.CONFIDENTIAL))
public class SomeServlet extends HttpServlet { ... }
Или с ServletRegistration
в ServletContainerInitializer
(или в любом месте, где вы имеете доступ к ServletContext
)
ServletRegistration.Dynamic dynamic = context.addServlet("someServlet", SomeServlet.class);
dynamic.addMapping("/*");
HttpConstraintElement httpConstraintElement = new HttpConstraintElement(TransportGuarantee.CONFIDENTIAL);
ServletSecurityElement servletSecurityElement = new ServletSecurityElement(httpConstraintElement);
dynamic.setServletSecurity(servletSecurityElement);
Ответ 2
Я смог сделать это для проекта, настроив безопасность домена в стеклянном поле:
- Создайте новый домен безопасности в этом примере: FooRealm
- Добавить пользователей w (или без) паролей в FooRealm
- Добавьте каждого пользователя в группу "GroupFoo"
Что покрывает вашу конфигурацию в Glassfish, вот ваш web.xml:
<security-constraint>
<display-name>SecurityConstraint</display-name>
<web-resource-collection>
<web-resource-name>Everything</web-resource-name>
<description>Everything</description>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>UserAuthenticationConstraint</description>
<role-name>GroupFoo</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>FooRealm</realm-name>
<form-login-config>
<form-login-page>/Login.jsp</form-login-page>
<form-error-page>/LoginError.html</form-error-page>
</form-login-config>
</login-config>