【发布时间】:2017-06-11 22:27:49
【问题描述】:
我想测试我的 REST 端点。在我的 REST 方法中有一些基于 SecurityContext 的过滤器。当我在我的测试类中设置 SecurityContext 并调用其余方法时,SecurityContext 被删除。只有当我在我的 REST 方法中创建 SecurityContext 时,它才会生效。 有没有可能如何转移上下文?
SecurityContext securityContext = new SecurityContextImpl();
securityContext.setAuthentication(authentication);
SecurityContextHolder.setContext(securityContext);
// is here User ...
.mockMvc.perform(get("/test"...)
休息控制器:
public ResponseEntity<...> getTest(){
// is now anonymus
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
谢谢
【问题讨论】:
-
查看 Rob Winch 的回答:Run unit tests on controllers that require authentication
-
你应该(几乎)永远不要在你的代码中直接调用
SecurityContextHolder。相反,您应该只在控制器方法中包含Authentication类型的参数,然后 Spring 将注入它(就像HttpServletRequest/Response、Session、Model和许多其他类型一样)
标签: java spring rest spring-security