- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
类似于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/
我有一个应用程序,我在其中使用 Spring Social Security 进行身份验证和授权。不幸的是,我在模拟 Spring Security 时遇到了一些问题。似乎它根本不起作用。 我有一个
类似于Authentication token passed to ControllerAdvice is null when running through MockMvc ,无论我手动添加上下文还
我编写了一些测试,尝试使用 @WithUserDetails 注释运行。但是,当我运行它时,它告诉我找不到我的自定义 UserDetailsService 实现。我怎样才能帮助测试类找到这个类?
在使用 Spring MockMVC 的 JUnit 测试中,有两种方法可以作为 Spring Security 用户进行身份验证:@WithMockUser 使用提供的凭据创建一个虚拟用户,@Wit
我想将 application.properties 中的值与 @WithUserDetails() 注释一起用于我的测试。 我当前的代码: @Value("${user.admin}") priva
我对 Spring Boot 的 TestEntityManager 和 @WithUserDetails 注释有疑问。 这是我的测试套件: public class AdvertisementAut
我是一名优秀的程序员,十分优秀!