一尘不染

将Tomcat Basic Auth与新的WebApplicationInitializer一起使用

tomcat

好的,所以我以前在经典的web.xml中使用了此技术,但是由于我正在使用WebApplicationInitializer,因此现在很难使其起作用。

我的WebApplicationInitializer包含以下代码:

HttpConstraintElement constraint = new HttpConstraintElement(
        TransportGuarantee.NONE,
        new String[]{"sponsorUsers"});
ServletSecurityElement servletSecurity =
        new ServletSecurityElement(constraint);
dispatcher.setServletSecurity(servletSecurity);

我正在尝试对servlet中的任何资源请求的任何http方法要求基本身份验证(用户名和密码)。我得到的只是一个403-没有提示输入用户名。我的怀疑是,我需要将auth-
method设置为BASIC,就像在xml中那样:

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>User Auth</realm-name>
</login-config>

但是在Java类中看不到等效项。有什么帮助吗?谢谢!


阅读 247

收藏
2020-06-16

共1个答案

一尘不染

A WebApplicationInitializer基本上是Servlet
3.0的Spring扩展ServletContainerInitializer

您无法做一些事情ServletContainerInitializer,或者ServletContext更具体地说,其中之一是配置一些安全组件,例如login- config

相反,你可以同时拥有ServletContainerInitializerweb.xml使用属性metadata- complete设置为false。例如,

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    metadata-complete="false" version="3.0">

然后在其中添加<login-config>元素。

2020-06-16