Java 控制器测试中的注入原理
我想在控制器测试中注入主体对象,但它总是空的。Im已将身份验证对象设置为SecurityContextHolderJava 控制器测试中的注入原理,java,spring,mockito,Java,Spring,Mockito,我想在控制器测试中注入主体对象,但它总是空的。Im已将身份验证对象设置为SecurityContextHolder SecurityContextHolder.getContext().setAuthentication(authentication); 这是我以前的设置 @Autowired private WebApplicationContext wac; @Before public void abstractControllerSetUp() {
SecurityContextHolder.getContext().setAuthentication(authentication);
这是我以前的设置
@Autowired
private WebApplicationContext wac;
@Before
public void abstractControllerSetUp() {
securityUser = getPrincipal();
authentication = logIn();
mockMvc = webAppContextSetup(wac).build();
}
但是当我打电话的时候
mockMvc.perform(put("/partner/notifications/activate")
.content(toJson(command))
.with(user(securityUser))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
主体始终为null,它在应用程序运行时工作
@PutMapping("/activate")
public void activateNotification(@RequestBody NotificationCommand command, @AuthenticationPrincipal Principal principal) {
在Spring4.3.2中,
MockMvcRequestBuilders
有一个名为principal()
的方法。用它来代替(user())
请尝试以下操作:
User user = new User(userName,userPassword, AuthorityUtils.createAuthorityList("YOUR_ROLES...."));
TestingAuthenticationToken testingAuthenticationToken = new TestingAuthenticationToken(user,null);
然后
你看过@WithMockUser(第11.2节)了吗?勾选这个:
User user = new User(userName,userPassword, AuthorityUtils.createAuthorityList("YOUR_ROLES...."));
TestingAuthenticationToken testingAuthenticationToken = new TestingAuthenticationToken(user,null);
mockMvc.perform(put("/partner/notifications/activate").principal(testingAuthenticationToken))