java 无法对Sping Boot 集成测试的请求进行身份验证

holgip5t  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(137)

我遵循了Spring Boot Authentication for Integration Tests上公认的解决方法,并应用以下方法对集成测试的请求进行身份验证:

@SpringBootTest
@AutoConfigureMockMvc
@Transactional
@ActiveProfiles("test")
@EnableAutoConfiguration(
        exclude = {
        SecurityAutoConfiguration.class,
          SecurityFilterAutoConfiguration.class,
        // FallbackWebSecurityAutoConfiguration.class, // cannot find this ref
        OAuth2ClientAutoConfiguration.class
})
abstract public class IntegrationTest {

    @Autowired
    protected MockMvc mvc;

    @MockBean
    protected AuthService authService;

    @MockBean
    protected JwtUtils jwtUtils;

和测试类:

class ProductControllerTest extends IntegrationTest {

    @Test
    void findById() throws Exception {
        mvc.perform((get("/api/v1/products/{id}", 1)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.data.name", equalTo("Laptop")));
    }

然而,它没有任何意义,仍然给出“AuthEntryPointJwt:未经授权的错误:访问此资源需要完全身份验证”错误。
我还尝试通过application-test.yml使用第二个选项:

spring:  
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration
      - org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration
      - org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration
      - org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration
tf7tbtn2

tf7tbtn21#

它可能是SecurityAutoConfiguration,而SecurityFilterAutoConfiguration bean可能会被项目中的其他配置自动启用,例如自定义的WebSecurityConfigurerAdapterSecurityConfigurerAdapter实现。
您可以在启动期间检查日志,以查看实际应用了哪些自动配置类。

相关问题