在spring boot>=2.4.3中匹配repositoryrestresource端点的尾部斜杠

mbzjlibv  于 2021-10-10  发布在  Java
关注(0)|答案(0)|浏览(143)

自spring启动版本2.4.3以来,如果在末尾有一个尾随斜杠,repositoryrestresource公开的端点似乎与安全配置的mvcmatcher中定义的路径不匹配。
我的安全配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and().csrf().disable().headers().frameOptions().disable().and().exceptionHandling()
            .and().sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().authorizeRequests()

            .mvcMatchers(HttpMethod.POST,"/api/items").permitAll()
            .mvcMatchers(HttpMethod.GET,"/api/items").permitAll()
            .mvcMatchers(HttpMethod.PATCH, "/api/items/{\\d+}").permitAll()
            .anyRequest().denyAll();

}

其他mvc配置:

@Configuration
public class MVCConfig implements WebMvcConfigurer {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseTrailingSlashMatch(true);
    }
}

存储库很简单

@RepositoryRestResource
public interface ItemRepository extends CrudRepository<Item, Long> {
}

现在,调用get on/api/items可以正常工作,但是/api/items/(注意后面的斜杠)返回代码403
对于具有以下内容的自定义控制器 @GetMapping("/api/items") mvcconfig似乎已生效,并且后面的斜杠已匹配。关于如何使repositoryrestresource端点也像这样运行,有什么帮助吗?
到目前为止,我找到的唯一解决方法就是在安全配置中添加/**到路径,这实际上不是一个选项,因为它会公开其他路径。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题