我有spring Boot 应用程序(mvc,thymeleaf,data jpa,h2),配置允许所有用户访问h2-console:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
PathRequest.H2ConsoleRequestMatcher h2ConsoleRequestMatcher = PathRequest.toH2Console();
http.authorizeHttpRequests(requests -> requests
.requestMatchers("/").permitAll()
.requestMatchers(h2ConsoleRequestMatcher).permitAll()
.anyRequest().authenticated()
);
http.csrf(csrf -> csrf.ignoringRequestMatchers(h2ConsoleRequestMatcher));
http.headers().frameOptions().sameOrigin();
//...
return http.build();
}
我也有测试,我想验证,h2-console是可访问的:
@SpringBootTest @AutoConfigureMockMvc class SecurityApplicationTests {
@Autowired
MockMvc mockMvc;
@Test
void shouldAccessH2Console() throws Exception {
mockMvc.perform(get("/h2-console"))
.andExpect(status().isOk());
}
}
当我运行测试时,我得到了NoSuchBeanaberrationException:No qualifying bean of type 'org.springframework.boot.autoconfigure.h2.H2ConsoleProperties' available
但是如果我从main()启动应用程序,一切都像预期的那样工作,我可以从浏览器访问H2。
我希望@SpringBootTest
像@SpringBootApplication
一样提供完整的应用程序上下文
为什么在测试中没有创建H2 ConsoleProperties bean,我如何解决这个问题?
1条答案
按热度按时间mkshixfv1#
我也遇到了同样的问题,在运行Sping Boot 测试时遇到了完全相同的异常,但是当只通过main运行应用程序时,一切都很好。
对我来说,解决这个问题的办法是
正如在www.example.com上所描述https://www.baeldung.com/spring-boot-h2-database#h2-console,控制台默认情况下是不启用的,因此必须设置这个属性(尽管我可以访问控制台,即使没有设置属性..)。但我认为这是问题的根源。当控制台未启用时,自动配置不可用,并且在安全配置中配置
PathRequest.toH2Console()
时,会发生异常。当显式启用控制台时,H2ConsoleProperties
也可用。也许会有帮助