Probleme beim Einspritzen meine Spring security user in meinem controller

Ich bin mit Spring 3.1.0.RELEASE mit Spring Security 3.1. Ich will Spritzen mein Frühling Benutzer (d.h. der Benutzer, der aktuell angemeldet ist) in einen controller. Ich möchte dies tun im Gegensatz zur Verwendung

SecurityContextHolder.getContext().getAuthentication().getPrincipal();

weil es mir erlaubt, den test der Steuergeräte mehr leicht mit JUnit. Aber, ich habe ein problem mit meinem aktuellen setup. Meine Frage ist, was ist der richtige Weg, um zu injizieren, meine Benutzer (pro Anfrage) in meinem controller? In meiner Anwendung Kontext-Datei, ich habe ...

<bean id="userDetails" class="com.myco.eventmaven.security.SecurityHolder" factory-method="getUserDetails" scope="request">
    <aop:scoped-proxy />
</bean>

wo definiere ich meine factory-Klasse als ...

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

}

aber die factory-Klasse immer wieder stirbt, weil "userService" nicht autowired (der Wert ist immer null). Ich bin auf der Suche nach einem besseren Weg, um all dies zu tun, kann leicht auch integrieren in mein JUnit-test. Irgendwelche Ideen?

Bearbeiten: Hier ist das JUnit-test-ich freue mich auf die Arbeit mit ...

@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");
}
InformationsquelleAutor Dave | 2012-03-20
Schreibe einen Kommentar