自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端点也像这样运行,有什么帮助吗?
到目前为止,我找到的唯一解决方法就是在安全配置中添加/**到路径,这实际上不是一个选项,因为它会公开其他路径。
暂无答案!
目前还没有任何答案,快来回答吧!