gpt4 book ai didi

java - @RespositoryRestController 中的空身份验证@WithUserDetails

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:49 24 4
gpt4 key购买 nike

类似于Authentication token passed to ControllerAdvice is null when running through MockMvc ,无论我手动添加上下文还是使用 @WithUserDetails 添加上下文,我的 MockMvc 使用 Spring Data REST 和 Spring Security 对 Spring Boot 1.5.16 应用程序进行的测试始终具有空的 Authentication 参数。

这是 Spring Security 测试代码中的错误,还是我在某个地方搞砸了?

@RepositoryRestController 方法如下所示:

@PostMapping("/resources/{id}/attributes")
public @ResponseBody ResponseEntity<?> attributes(
@PathVariable("id") long resourceId,
@RequestParam(value = "file", required = true) MultipartFile file,
Authentication authentication ) throws IOException {

// 2.
Subject.setAuthentication(authentication);

try (InputStream input = file.getInputStream()) {
attributeHandler.read(resourceId, file.getName(), input);
}

return ResponseEntity.ok(success());
}

我的 MockMvc 测试如下所示:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@AutoConfigureMockMvc
public class RestControllerTest {
private MockMvc mockMvc;

@Autowired
private WebApplicationContext webApplicationContext;

@Before
public void setup() throws Exception {
this.mockMvc = webAppContextSetup(webApplicationContext)
.apply(springSecurity())
.build();
}

@Test
@WithUserDetails("myAttributeManagerUsername")
public void attributes() throws Exception {

// 1.
Authentication authentication =
SecurityContextHolder.getContext().getAuthentication();

mockMvc.perform(
MockMvcRequestBuilders.fileUpload(
"/api/resources/1/attributes"
).file(attributesFile())
// 3. .with(authentication(authentication)))
.andExpect(status().isOk());
}
}

在测试方法(在 1.)中,我已经验证了身份验证是否存在,但是当调用 Controller 方法(在 2.)时,身份验证为空,即使我通过 .sessionAttr().with() 手动设置上下文(在 3.)(如图所示)。在测试之外运行应用程序时, Controller 方法确实会通过经过身份验证的主题获得正确的身份验证 token (在 2 处)。

知道我的测试出了什么问题吗?

最佳答案

哎呀。这可能不是特别有帮助,但是......

作为我的(未显示)基础设施的一部分,过滤器在触发此错误的 API 之前错误地重置了身份验证。

抱歉产生噪音。

关于java - @RespositoryRestController 中的空身份验证@WithUserDetails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53875541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com