在 REST 环境中使用 Spring Session/Security 时如何使用 `with(user(`

How to use use `with(user(` when using Spring Session/Security in REST environment

当使用 Spring Session 和 HeaderHttpSessionStrategy 时,是否可以用 SecurityMockMvcRequestPostProcessors.user 填充测试用户。

我试过类似的东西:

mockMvc.perform(
    get(URL)
        .with(user("user").password("pwd").roles("USER", "ADMIN")))
    .andExpect(status().isOk())

但它 returns 一个 403。 没有 with(user( 我得到一个 401 所以有区别。

我有一个失败的简单 SecurityConfig 包含:

    http
        .anonymous()
            .and()
        .authorizeRequests()
            .antMatchers("/api/**").hasAuthority("USER")
            .and()
        .csrf()
            .disable()
        .httpBasic()
            .and()
        .requestCache()
            .requestCache(new NullRequestCache());

我与 https://github.com/spring-projects/spring-session/tree/1.0.1.RELEASE/samples/rest 非常相似,因为我有一个端点,我使用 http basic 进行身份验证。它 returns 通过 header 的身份验证令牌,然后在其他 REST 调用中使用。

所以我希望我可以在这种情况下使用 with(user( 让我的测试更容易。

是的,你应该能够做到这一点。问题是

.with(user("user").password("pwd").roles("USER", "ADMIN")))

正在应用角色,这意味着会自动添加 ROLE_ 前缀。

相比之下,您的配置使用的是:

.antMatchers("/api/**").hasAuthority("USER")

不会自动添加 ROLE_ 前缀。相反,请尝试使用:

.antMatchers("/api/**").hasRole("USER")

注意:我还更新了测试以包含 example of with(user("user"))