@WithUserDetails 无法创建 SecurityContext

use*_*209 5 spring integration-testing unit-testing spring-mvc spring-security

我正在尝试测试某些 url 是否只能由具有某些权限的授权用户访问。因为我有自己的UserDetails,所以我按照文档中@WithUserDetails的说明来注释我的测试

我的测试类看起来像:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { Application.class, ConfigTest.class }, webEnvironment = 
    WebEnvironment.RANDOM_PORT)
@Transactional
public class SecurityIntegrationTest {

    @Autowired
    private WebApplicationContext webApplicationContext;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
         mockMvc=MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
    }

    @Test
    @WithUserDetails(userDetailsServiceBeanName="myUserDetailsService")
    public void testTemp() throws Exception {
        this.mockMvc.perform( get("/")).andDo(print()).andExpect(status().isOk());          
    }
}
Run Code Online (Sandbox Code Playgroud)

Config 中的 UserDetails Bean 如下所示:

@Configuration
public class ConfigTest extends WebMvcConfigurerAdapter {
    public ConfigTest() {
       super();
    }    

    @Bean
    public UserDetailsService myUserDetailsService() {
        return new MyUserDetailsService();
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我尝试运行测试,则会出现异常:

TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@1ad535f] to process 'before' execution of test method [public void org.trip.test.SecurityIntegrationTest.testTemp() throws java.lang.Exception] for test instance [org.trip.test.SecurityIntegrationTest@167181f]
j.l.IllegalStateException: Unable to create SecurityContext using @org.springframework.security.test.context.support.WithUserDetails(userDetailsServiceBeanName=myUserDetailsService, value=user)
Run Code Online (Sandbox Code Playgroud)

我想这意味着结合@Before和@WithUserDetails这里存在问题。我也试过更换@Before用@BeforeTransaction,但是这并没有帮助。

我不确定如何解决此问题,因此将不胜感激任何帮助/建议/想法。

PS:匿名(没有@WithUserDetails)运行相同的文本工作正常。