我已经以某种round回的方式完成了-尽管可以。我要做的是让Spring-
Security创建一个会话,并在会话中填充相关的Security属性,然后以这种方式获取该会话:
this.mockMvc.perform(post("/j_spring_security_check") .param("j_username", "fred") .param("j_password", "fredspassword")) .andExpect(status().isMovedTemporarily()) .andDo(new ResultHandler() { @Override public void handle(MvcResult result) throws Exception { sessionHolder.setSession(new SessionWrapper(result.getRequest().getSession())); } });SessionHolder是我的自定义类,仅用于保存会话:
private static final class SessionHolder{ private SessionWrapper session; public SessionWrapper getSession() { return session; } public void setSession(SessionWrapper session) { this.session = session; }}而SessionWrapper是从MockHttpSession扩展的另一个类,仅因为会话方法需要MockHttpSession:
private static class SessionWrapper extends MockHttpSession{ private final HttpSession httpSession; public SessionWrapper(HttpSession httpSession){ this.httpSession = httpSession; } @Override public Object getAttribute(String name) { return this.httpSession.getAttribute(name); }}有了这些设置,现在您可以简单地从sessionHolder中获取会话并执行后续方法,例如。就我而言:
mockMvc.perform(get("/membersjson/1").contentType(MediaType.APPLICATION_JSON).session(sessionHolder.getSession())) .andExpect(status().isOk()) .andExpect(content().string(containsString("OneUpdated")));


