为什么在spring mockmvc单元测试中没有传播身份验证?

时间:2018-04-12 20:24:05

标签: java spring spring-security spring-security-oauth2 mockmvc

我正在尝试按照本指南http://engineering.pivotal.io/post/faking_oauth_sso/测试一些oauth端点。

我创建了一个方法getOauthUserAuthentication(),它返回一个oauth2身份验证对象,主体为'vince',权限为'ROLE_USER'。

Job newJob = jobRepository.save(job);
Authentication auth = getOauthUserAuthentication()

restMockMvc.perform(get("/api/jobs/{id}", newJob.getId())
        .with(authentication(auth)))
        .andExpect(status().isOk())

我在控制器内部设置了一个断点,并且调用SecurityContextHolder.getContext().getAuthentication()返回一个带有主体anonymousUser和权限ROLE_ANONYMOUS的身份验证对象。

似乎正在正确创建令牌,但未将其传播到mockMvc创建的安全上下文。我错过了什么?

1 个答案:

答案 0 :(得分:0)

运行测试时,我一直在调用与我创建的资源服务器配置类关联的配置文件。当我从活动配置文件注释中删除配置文件调用时,我在测试中创建的身份验证对象开始显示在控制器中。我相信config类创建的安全上下文覆盖了mockMvc创建的安全上下文。由于我没有发送持票令牌,配置类自动创建了anonymousUser原则。