Spring 引导需要上下文根授权

Spring boot require authorization at context root

我正在研究 Spring 一个项目的启动,运行 遇到一个奇怪的 Spring 安全问题。该应用程序配置为要求通过以下 Java 配置对所有 URL 进行身份验证:

http
        .authorizeRequests()
        .antMatchers("/**")
        .authenticated()

我已经确认这对大多数视图都有效:尝试访问 localhost:8080/test 会导致重定向到登录页面,该页面在登录之前拒绝访问(之后它工作正常) .但是,当我访问在上下文根 (localhost:8080/) 中注册的视图时,这不会发生;我只是接受观点。这个结果不是我所期望的,特别是因为使用传统 Spring XML 配置编写的另一个测试应用程序可以使用以下行成功地要求在上下文根中进行身份验证:

<security:intercept-url pattern="/**" access="isAuthenticated()" />

我可以想到一些解决方法(最简单的可能是在根视图中重定向 header),但似乎阻力最小的路径是正确配置 Spring 安全 - 什么我在这里做错了吗?

编辑:如以下评论所述,我尝试了 .anyRequest()、.regexMatchers(".*") 以及 .antMatchers() 的各种模式,包括 ** 和 /,以及 none 似乎对上下文根本身有任何影响。

编辑 2:我现在也已成功将 war-packaged 应用程序部署到 non-embedded Tomcat,并且遇到了同样的问题;这似乎表明该问题并非嵌入式 Tomcat 服务器所独有。

好吧,我想通了这件事,我觉得自己有点像个白痴。对于后代,这是我的实际问题:

我使用以下代码创建了一个登录表单和注销过程:

            .formLogin()
                .loginProcessingUrl("/login")
                .loginPage("/auth")
                .defaultSuccessUrl("/")
                .permitAll()
                .and()
            .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/")
                .invalidateHttpSession(true);
                .permitAll()

我没有意识到的是 .permitAll() 应用于登录和注销声明中的所有 URL:/login、/auth、/logout 和 /。一旦我在两个声明中注释掉 .permitAll() 并在初始 .antMatchers() 中添加前三个,包括上下文根在内的所有路径都正确地需要身份验证。