Подтвердить что ты не робот

Как программно настроить <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 выше вы видите, что он не ссылается ни на какой конкретный сервлет

4b9b3361

Ответ 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>