引导 2.6 升级后无法访问端点

Posted

技术标签:

【中文标题】引导 2.6 升级后无法访问端点【英文标题】:Endpoint not accessible after Boot 2.6 upgrade 【发布时间】:2022-01-04 20:07:01 【问题描述】:

在我的项目中将 Boot 版本升级到 2.6.0 后,我的端点无法再访问,即使我使用 permitAll() 指令配置了它,我也会自动重定向到登录页面:

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter 

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http.authorizeRequests()
            .mvcMatchers("presentations")
            .permitAll()
            .anyRequest()
            .authenticated()
            .and()
            .formLogin();
    

    // ...

【问题讨论】:

【参考方案1】:

看来这实际上与升级后Spring Boot如何处理mvcMatchers值有关:

将请求路径与注册的 Spring MVC 处理程序映射匹配的默认策略已从 AntPathMatcher 更改为 PathPatternParser。

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes#deferred-openid-connect-discovery

而且这个新设置需要我的presentations 模式以/ 开头:

@Override
protected void configure(HttpSecurity http) throws Exception 
    http.authorizeRequests()
        .mvcMatchers("/presentations")
        .permitAll()
        .anyRequest()
        .authenticated()
        .and()
        .formLogin();

或者,如果我有多个路由并且需要快速修复,我可以设置以下应用程序属性以将其恢复为之前的行为:

spring.mvc.pathmatch.matching-strategy=ant-path-matcher

顺便说一句,path-pattern-parser 是默认值,因为它似乎更有效...这里有一些关于此以及PathPatternParserAntPathMatcher 之间差异的附加信息:

https://spring.io/blog/2020/06/30/url-matching-with-pathpattern-in-spring-mvc https://docs.spring.io/spring-framework/docs/5.3.13/reference/html/web.html#mvc-ann-requestmapping-uri-templates

编辑:我还意识到使用antMatchers() 使我的一些MockMvc 测试失败,这是在引导2.6.1 中修复的错误。

【讨论】:

以上是关于引导 2.6 升级后无法访问端点的主要内容,如果未能解决你的问题,请参考以下文章

使用 Login Module JBoss Approach 成功登录后,无法(拒绝访问响应)执行带有注释 @RolesAllowed 的 rest 端点

升级到 Catalina (MAC OS) 后无法访问 github

升级到 SDK 2.3.301 后,Service Fabric Actor 或服务随机无法访问

从 4.1 升级到 4.2 后无法访问 extjs 应用程序

升级到 Mountain Lion 后无法访问 MySQL 数据库(使用 MAMP)

无法访问 Spring Boot Actuator“/actuator”端点