gpt4 book ai didi

Spring 3 MVC Controller 集成测试 - 将 Principal 注入(inject)方法

转载 作者:行者123 更新时间:2023-12-04 13:17:23 25 4
gpt4 key购买 nike

作为 Spring 3 MVC 的一部分,可以将当前登录的用户(原理)对象注入(inject)到 Controller 方法中。

例如。

@Controller
public class MyController {

@RequestMapping(value="/update", method = RequestMethod.POST)
public String update(ModelMap model, Principal principal) {

String name = principal.getName();
... the rest here
}
}

这在此处作为 Spring 3 文档的一部分进行了记录:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-arguments .

这适用于生产代码。但是我不知道如何测试这个。
当我创建集成测试时(也设置了 spring 安全上下文)
并调用 Controller 句柄方法,则 Principal 始终为空!

public class FareTypeControllerIntegrationTest extends SpringTestBase {

@Autowired
private MyController controller;

@Autowired
private AnnotationMethodHandlerAdapter handlerAdapter;

private final MockHttpServletRequest request = new MockHttpServletRequest();
private final MockHttpServletResponse response = new MockHttpServletResponse();

@Test
public void testUpdate() throws Exception {
request.setRequestURI("/update");
request.setMethod(HttpMethod.POST.name());
... setup rest of request

ModelAndView mav = handlerAdapter.handle(request, response, controller);

.. rest of assertions

}

测试运行正常,除 Principal 之外的所有内容均为空。

有任何想法吗?

TIA

阿尤布

最佳答案

在快速查看 Spring 源代码后,这应该可以工作:

request.setUserPrincipal(somePrincipal);

关于Spring 3 MVC Controller 集成测试 - 将 Principal 注入(inject)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8990931/

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