2

作为这个问题的后续,我想知道如何透明地将“授权”标头添加到 a MockHttpServletRequestBuilder,只有当测试中存在给定的注释时。

样本:

@RunWith(SpringRunner.class)
@EnableSpringDataWebSupport
@WebMvcTest(MyController.class)
@Import({WebSecurityConfig.class})
public class MyControllerTest {

    @Autowired
    protected MockMvc mockMvc;

    @Test
    @WithJwt(principal = "admin", authorities = {"READ_USERS"})
    public void readUsersAuthorityCanListUsers() throws Exception {
        final List<User> users = Arrays.asList(admin, user);
        when(userRepo.findAll(any(Pageable.class))).thenReturn(new PageImpl<>(users));

        this.mockMvc
                .perform(get("/")
                        .header("Authorization", "Bearer foo"))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.content", hasSize(users.size())));
    }
}

.header("Authorization", "Bearer foo")如果测试用 装饰,如何对请求生成器进行后处理以自动应用@WithJwt

4

1 回答 1

1

我结束了包装MockMvc和代理方法调用,添加了Authorization标题。

这对于单个标头来说是多余的,但这MockMvcHelper也设置了内容类型和接受标头,提供了发出简单 api 调用的快捷方式(获取、发布、放置补丁、使用默认标头和序列化删除)等。

您可以在其他问题的解决方案末尾查看此包装器:https ://stackoverflow.com/a/48540159/619830

于 2019-02-18T16:09:41.927 回答