如何在 Servlets 3.x 中以编程方式设置<安全约束>?

2022-09-02 10:48:03

在我当前的Web应用程序中,我试图摆脱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>

如何在 servlet 3.x 配置代码中打开上述 web.xml 配置代码段,以执行相同的操作?

更新

我希望约束应用于应用程序中的每个 servlet、过滤器和静态资源,到目前为止,我在网上看到的示例显示了将安全约束附加到 servlet,但我希望将安全约束附加到 Web 应用。在上面的 xml 代码段中,您可以看到它没有引用任何特定的 servlet


答案 1

我相信你正在寻找注释@ServletSecurity

@WebServlet(urlPatterns = "/*")
@ServletSecurity(value = @HttpConstraint(transportGuarantee = TransportGuarantee.CONFIDENTIAL))
public class SomeServlet extends HttpServlet { ... } 

或者与在一个(或任何你有访问权限的任何地方)ServletRegistrationServletContainerInitializerServletContext)

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

我能够通过配置 glassfish 域安全性来为项目执行此操作:

  1. 创建一个新的安全域,在此示例中称为:FooRealm
  2. 将使用(或 w/o)密码的用户添加到 FooRealm
  3. 将每个用户添加到“群福”

这涵盖了您的玻璃鱼配置,这是您的网络.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>

推荐