Bienvenido a nuestra comunidad, aquí encontrarás la respuesta que estás buscando.
Solución:
Si entiendo bien tu caso hay una de las soluciones.
En la mayoría de los casos, JwtDecoder
bean realiza el análisis y la validación del token si el token existe en los encabezados de solicitud.
Ejemplo de su configuración:
@Bean
JwtDecoder jwtDecoder()
/*
By default, Spring Security does not validate the "aud" claim of the token, to ensure that this token is
indeed intended for our app. Adding our own validator is easy to do:
*/
NimbusJwtDecoder jwtDecoder = (NimbusJwtDecoder)
JwtDecoders.fromOidcIssuerLocation(issuer);
OAuth2TokenValidator audienceValidator = new AudienceValidator(audience);
OAuth2TokenValidator withIssuer = JwtValidators.createDefaultWithIssuer(issuer);
OAuth2TokenValidator withAudience = new DelegatingOAuth2TokenValidator<>(withIssuer, audienceValidator);
jwtDecoder.setJwtValidator(withAudience);
return jwtDecoder;
Entonces, para las pruebas, debe agregar el trozo de este bean y también para reemplazar este bean en el contexto de primavera, necesita la configuración de prueba con él.
Pueden ser algunas cosas como esta:
@TestConfiguration
public class TestSecurityConfig 12345678";
public JwtDecoder jwtDecoder()
// This anonymous class needs for the possibility of using SpyBean in test methods
// Lambda cannot be a spy with spring @SpyBean annotation
return new JwtDecoder()
@Override
public Jwt decode(String token)
return jwt();
;
public Jwt jwt()
// This is a place to add general and maybe custom claims which should be available after parsing token in the live system
Map claims = Map.of(
SUB, USER_AUTH0ID
);
//This is an object that represents contents of jwt token after parsing
return new Jwt(
AUTH0_TOKEN,
Instant.now(),
Instant.now().plusSeconds(30),
Map.of("alg", "none"),
claims
);
Para usar esta configuración en las pruebas, simplemente seleccione esta configuración de seguridad de prueba:
@SpringBootTest(classes = TestSecurityConfig.class)
También en la solicitud de prueba debe haber un encabezado de autorización con un token como Bearer .. something
.
Aquí hay un ejemplo con respecto a su configuración:
public static RequestBuilder getAllRoundsByUserId(String userId)
return MockMvcRequestBuilders
.get("/users/" + userId + "/rounds/")
.accept(MediaType.APPLICATION_JSON)
.header(HttpHeaders.AUTHORIZATION, "Bearer token"))
.contentType(MediaType.APPLICATION_JSON);