无法从控制器中的请求中获取令牌
Cannot get the token from request in the controller
我正在尝试在 Spring 中测试 loginController,但无法从请求中获取令牌。
在我的测试中
private CsrfToken token;
HttpServletRequest request = new MockHttpServletRequest();
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
token = new DefaultCsrfToken("1", "a", "b");
request.setAttribute(CsrfToken.class.getName(), token);
}
@Test
public void testCtrlCorrecltyHandlesPassword() throws Exception {
CsrfToken token2 = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
MvcResult result = this.mockMvc.perform(get("/rest/login")
.param("name", name)
.param("password", password)
.param("request", request.toString())
//.sessionAttr("request", request)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andReturn();
}
当我调试时,我看到 token2 已成功创建,并且我正在从请求中获取它的值,但是在控制器中,当我尝试使用完全相同的方式时
CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
为空。
我也试过 .sessionAttr("request", request)
和 @ModelAttribute("request")HttpServletRequest request
作为控制器中的参数,但它不起作用。
最终...
MockHttpSession session = new MockHttpSession();
session.setAttribute("token", token);
MvcResult result = this.mockMvc.perform(get("/rest/login").session(session)
.header("X-Csrf-Token", "")
.requestAttr(CsrfToken.class.getName(), token)
.param("name", name)
.param("password", password)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andReturn();
我正在尝试在 Spring 中测试 loginController,但无法从请求中获取令牌。 在我的测试中
private CsrfToken token;
HttpServletRequest request = new MockHttpServletRequest();
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
token = new DefaultCsrfToken("1", "a", "b");
request.setAttribute(CsrfToken.class.getName(), token);
}
@Test
public void testCtrlCorrecltyHandlesPassword() throws Exception {
CsrfToken token2 = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
MvcResult result = this.mockMvc.perform(get("/rest/login")
.param("name", name)
.param("password", password)
.param("request", request.toString())
//.sessionAttr("request", request)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andReturn();
}
当我调试时,我看到 token2 已成功创建,并且我正在从请求中获取它的值,但是在控制器中,当我尝试使用完全相同的方式时
CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
为空。
我也试过 .sessionAttr("request", request)
和 @ModelAttribute("request")HttpServletRequest request
作为控制器中的参数,但它不起作用。
最终...
MockHttpSession session = new MockHttpSession();
session.setAttribute("token", token);
MvcResult result = this.mockMvc.perform(get("/rest/login").session(session)
.header("X-Csrf-Token", "")
.requestAttr(CsrfToken.class.getName(), token)
.param("name", name)
.param("password", password)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andReturn();