tutorial que mvc mediante framework español desarrollo aplicaciones spring spring-mvc junit spring-security spring-test-mvc

que - Cómo simular el contexto de seguridad en Spring MVC para probar



spring mvc que es (2)

Añadir en pom.xml

<repository> <id>spring-snaspho</id> <url>http://repo.springsource.org/libs-milestone/</url> </repository> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <version>4.0.0.M1</version> </dependency>

y use org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors para la solicitud de autorización. Vea el uso de la muestra aquí , y el boleto Spring.io jira SEC-2592 .

Necesito probar algunas direcciones URL protegidas, por lo tanto, necesito configurar un contexto de seguridad falso en mis pruebas (junit).
En particular, necesito realizar algunos get y post en contra de mi aplicación web, usando un usuario autenticado. Debajo está mi código, puedo crear un contexto de seguridad de este tipo, pero necesito insertarlo en el objeto ''MockMvc''.
Establecí el objeto de autenticación en el contexto de seguridad y funciona, el resultado de ''SecurityContextHolder.getContext (). GetAuthentication (). GetPrincipal ()'' es [email protected] pero cuando llamo a GET en / profile I tener un error de aserción porque me redirigen a mi página de inicio de sesión, y no a / perfil.

@WebAppConfiguration @ContextConfiguration(locations = {"classpath:spring/security.xml", "classpath:spring/view.xml"}) @ActiveProfiles("default") @RunWith(SpringJUnit4ClassRunner.class) public class AuthenticationTest { @Autowired WebApplicationContext ctx; private MockMvc mockMvc; @Autowired private FilterChainProxy springSecurityFilterChain; @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { mockMvc = MockMvcBuilders.webAppContextSetup(ctx).addFilters(springSecurityFilterChain).build(); //@formatter:off UserDetailsLogic userDetailsLogic = null; userDetailsLogic = ctx.getBean(UserDetailsLogic.class); final UserDetailsImp userDetailsImp = new UserDetailsImp(); userDetailsImp.setAccountId(1001); userDetailsImp.setUserId(8001); userDetailsImp.setPassword("a378c92df7531df6fdf351f7ae1713f91f2dd2d45b9c6e1a8b02736ee3afec6595ff60465e9cb8da"); userDetailsImp.setUsername("[email protected]"); userDetailsImp.setEmail("[email protected]"); final Collection<GrantedAuthorityImplementation> authorities= new ArrayList<GrantedAuthorityImplementation>(); authorities.add(new GrantedAuthorityImplementation("ROLE_USER")); userDetailsImp.setAuthorities(authorities); userDetailsImp.setAccountNonExpired(true); userDetailsImp.setAccountNonLocked(true); userDetailsImp.setCredentialsNonExpired(true); userDetailsImp.setEnabled(true); final Authentication authToken = new UsernamePasswordAuthenticationToken (userDetailsImp.getUsername(), userDetailsImp.getPassword(), userDetailsImp.getAuthorities()); SecurityContextHolder.getContext().setAuthentication(authToken); System.out.println("principal:"+SecurityContextHolder.getContext().getAuthentication().getPrincipal()); mockMvc.perform(get("/profile").principal(authToken) .contentType(MediaType.TEXT_HTML) .accept(MediaType.TEXT_HTML)) .andDo(print()) .andExpect(status().isOk()) .andExpect(redirectedUrl(null)) .andExpect(forwardedUrl(null)); //@formatter:on }

Supongo que debería poner mi objeto de autenticación dentro del objeto MockMvc, pero no sé cómo
¿Alguien tiene alguna idea?


Esto es algo que escribí hace unos días. Creo que podría ser útil (probé lo mismo con el formulario de inicio de sesión, usando la sesión para la segunda solicitud) ver loginUser1Ok (..))

Ver MvcTest.java en

m4nuv / easy-bank .