J'implémente la sécurité de printemps avec oauth2 et jwt . Ci-dessous est ma fonction de connexion
function doLogin(loginData) {
$.ajax({
url : back+"/auth/secret",
type : "POST",
data : JSON.stringify(loginData),
contentType : "application/json; charset=utf-8",
dataType : "json",
async : false,
success : function(data, textStatus, jqXHR) {
setJwtToken(data.token);
},
error : function(jqXHR, textStatus, errorThrown) {
alert("an unexpected error occured: " + errorThrown);
window.location.href= back+'/login_page.html';
}
});
}
Et j'ai le contrôleur
@RequestMapping(value = "auth/secret", method = RequestMethod.POST)
public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtAuthenticationRequest authenticationRequest, Device device) throws AuthenticationException {
System.out.println();
logger.info("authentication request : " + authenticationRequest.getUsername() + " " + authenticationRequest.getPassword());
// Perform the security
System.out.println( authenticationRequest.getUsername()+"is the username and "+authenticationRequest.getPassword());
final Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
authenticationRequest.getUsername(),
authenticationRequest.getPassword()
)
);
SecurityContextHolder.getContext().setAuthentication(authentication);
logger.info("authentication passed");
// Reload password post-security so we can generate token
final UserDetails userDetails = userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
final String token = jwtTokenUtil.generateToken(userDetails, device);
logger.info("token " + token);
// Return the token
return ResponseEntity.ok(new JwtAuthenticationResponse(token));
}
Mais quand j'essaye la demande de poste avec le facteur, ça me montre
{
"timestamp": 1488973010828,
"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryY4KgeeQ9ONtKpvkQ;charset=UTF-8' not supported",
"path": "/TaxiVis/auth/secret"
}
Mais quand je cosole.log(data)
dans l'appel ajax, il imprime le jeton? Je ne pouvais pas comprendre ce qui ne va pas. Toute aide est appréciée.
Vous devez définir le type de contenu dans postman de la manière suivante: JSON (application/json). Allez dans le corps de votre demande POST. Vous y trouverez l'option brute juste à côté de celle-ci.
Http 415 Media Unsupported
ne reçoit de réponse que lorsque l'en-tête de type de contenu que vous indiquez n'est pas pris en charge par l'application.
Avec POSTMAN, l'en-tête Content-type
que vous envoyez est Content type 'multipart/form-data
et non application/json
. Lorsque vous êtes dans le code ajax, vous le définissez correctement sur application/json
. Passez le bon en-tête Content-type dans POSTMAN et cela fonctionnera.
J'ai aussi eu cette erreur. J'utilisais du texte dans le corps après avoir changé en XML (text/xml), j'ai obtenu le résultat escompté.
Si votre demande est une requête XML, utilisez XML (test/xml).
Si votre demande est une requête JSON, utilisez JSON (application/json).