Spring转移SecurityContext进行集成测试

时间:2017-01-26 12:39:31

标签: java spring rest spring-security

我想测试我的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();
}

谢谢

1 个答案:

答案 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;