我想测试我的REST端点。在我的REST方法中有一些基于SecurityContext的过滤器。当我在我的测试类中设置SecurityContext并调用其余方法时,将删除SecurityContext。只有当我在REST方法中创建SecurityContext时才会产生影响。 是否有可能转移上下文?
SecurityContext securityContext = new SecurityContextImpl();
securityContext.setAuthentication(authentication);
SecurityContextHolder.setContext(securityContext);
// is here User ...
.mockMvc.perform(get("/test"...)
RestController:
public ResponseEntity<...> getTest(){
// is now anonymus
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
谢谢
答案 0 :(得分:0)
您可以使用defaultRequest
方法设置为同一测试类中的所有测试重用的身份验证:
@BeforeClass
public void setUp()
{
mockMvc = MockMvcBuilders.webAppContextSetup(wac).defaultRequest(get("/").with(authentication(authentication))).apply(springSecurity()).build();
}
您需要的静态导入是:
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;