Я использую Spring 3.1.0.RELEASE с Spring Security 3.1.Я хочу внедрить моего пользователя Spring (то есть пользователя, который в данный момент вошел в систему) в контроллер.Я хочу сделать это вместо использования
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
, потому что это позволяет мне легче тестировать контроллер с помощью JUnit.Однако у меня возникла проблема с моей текущей настройкой.Мой вопрос заключается в том, как правильно ввести моего пользователя (по запросу) в мой контроллер?В моем файле контекста приложения у меня есть ...
<bean id="userDetails" class="com.myco.eventmaven.security.SecurityHolder" factory-method="getUserDetails" scope="request">
<aop:scoped-proxy />
</bean>
, где я определяю свой фабричный класс как ...
public class SecurityHolder {
@Autowired
private static UserService userService;
public static MyUserDetails getUserDetails() {
final Authentication a = SecurityContextHolder.getContext().getAuthentication();
if (a == null) {
return null;
} else {
final MyUserDetails reg = (MyUserDetails) a.getPrincipal();
final int userId = reg.getId();
final MyUserDetails foundUser = userService.findUserById(userId);
return foundUser;
} // if
} // getUserDetails
}
, но фабричный класс неоднократно умирает из-за сбоя "userService"чтобы получить автосвязь (значение всегда равно нулю).Я ищу лучший способ сделать все это, что можно легко интегрировать в мой тест JUnit.Есть идеи?
Редактировать : Вот тест JUnit, с которым я хочу поработать ...
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "file:src/test/resources/testApplicationContext.xml" })
public class UserEventFeedsControllerTest extends AbstractTransactionalJUnit4SpringContextTests {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
...
@Autowired
private RequestMappingHandlerAdapter handlerAdapter;
@Autowired
private RequestMappingHandlerMapping handlerMapping;
@Before
public void setUp() {
...
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
}
...
@Test
public void testSubmitUserEventFeedsForm() throws Exception {
request.setRequestURI("/eventfeeds.jsp");
request.setMethod("POST");
final List<EventFeed> allEventFeeds = getAllEventFeeds();
request.setParameter("userEventFeeds", allEventFeeds.get(0).getId().toString());
final Object handler = handlerMapping.getHandler(request).getHandler();
final ModelAndView mav = handlerAdapter.handle(request, response, handler);
assertViewName(mav, "user/eventfeeds");
}