Интеграционный тест контроллера Spring 3 MVC - инъекция Principal в метод

В рамках Spring 3 MVC можно внедрить объект текущего зарегистрированного пользователя (Principle) в метод контроллера.

Например,

@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) и вызываю метод handle контроллера, то Principal всегда null!

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, равно null.

Есть идеи?

TIA

Ayub

6
задан Ayub Malik 25 January 2012 в 09:47
поделиться