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)运行相同的文本工作正常。
| 归档时间: |
|
| 查看次数: |
3578 次 |
| 最近记录: |