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

Why is authentication not being propagated in spring mockmvc unit test?

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

我创建了一个方法 getOauthUserAuthentication(),其中 returns 一个具有主体 'vince' 和权限 'ROLE_USER' 的 oauth2 身份验证对象。

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

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

我在controller里面设置了一个断点,调用了SecurityContextHolder.getContext().getAuthentication() returns一个主体为anonymousUser,权限为ROLE_ANONYMOUS的认证对象。

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

当 运行 测试时,我一直在调用与我创建的资源服务器配置相关联的配置文件 class。当我从活动配置文件注释中删除配置文件调用时,我在测试中创建的身份验证对象开始出现在控制器中。我相信配置 class 创建的安全上下文覆盖了 mockMvc 创建的安全上下文。因为我没有发送不记名令牌,所以配置 class 自动创建了 anonymousUser 原则。