Estoy implementando Spring Security con oauth2 y jwt. la siguiente es mi función de inicio de sesión
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'; } }); }Y abajo tengo el Controller
@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)); }Pero cuando pruebo la solicitud de publicación con el cartero me muestra
{ "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" } Pero cuando hago cosole.log(data) en la llamada ajax, ¿imprime el token? No pude averiguar qué está mal. Se agradece cualquier ayuda.
Debe establecer el content-type en cartero como JSON (aplicación/json).
Vaya al cuerpo dentro de su solicitud POST, allí encontrará la opción sin procesar.
Justo al lado, habrá un menú desplegable, seleccione JSON (application.json).
Http 415 Media Unsupported se responde solo cuando el encabezado de tipo de contenido que está proporcionando no es compatible con la aplicación.
Con POSTMAN, el encabezado Content-type que está enviando es Content type 'multipart/form-data not application/json . Mientras está en el código ajax, lo está configurando correctamente en application/json . Pase el encabezado de tipo de contenido correcto en POSTMAN y funcionará.
También recibí este error. Estaba usando Texto dentro del cuerpo después de cambiar a XML (texto/xml), obtuve el resultado esperado.
Si su solicitud es una solicitud XML, use XML (texto/xml).
Si su solicitud es JSON, use JSON (aplicación/json)