core/src/main/java/org/springframework/security/jackson2/UsernamePasswordAuthenticationTokenDeserializer.java
@Override
	public UsernamePasswordAuthenticationToken deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
		UsernamePasswordAuthenticationToken token = null;
		ObjectMapper mapper = (ObjectMapper) jp.getCodec();
		JsonNode jsonNode = mapper.readTree(jp);
		Boolean authenticated = readJsonNode(jsonNode, "authenticated").asBoolean();
		JsonNode principalNode = readJsonNode(jsonNode, "principal");
		Object principal = null;
		if (principalNode.isObject()) {
			principal = mapper.readValue(principalNode.traverse(mapper), Object.class);
		} else {
			principal = principalNode.asText();
		}
		JsonNode credentialsNode = readJsonNode(jsonNode, "credentials");
		Object credentials;
		if (credentialsNode.isNull() || credentialsNode.isMissingNode()) {
			credentials = null;
		} else {
			credentials = credentialsNode.asText();
		}
		List<GrantedAuthority> authorities = mapper.readValue(
				readJsonNode(jsonNode, "authorities").traverse(mapper), new TypeReference<List<GrantedAuthority>>() {
		});
		if (authenticated) {
			token = new UsernamePasswordAuthenticationToken(principal, credentials, authorities);
		} else {
			token = new UsernamePasswordAuthenticationToken(principal, credentials);
		}
		JsonNode detailsNode = readJsonNode(jsonNode, "details");
		if (detailsNode.isNull() || detailsNode.isMissingNode()) {
			token.setDetails(null);
		} else {
			token.setDetails(detailsNode);
		}
		return token;
	}
@Override
	public UsernamePasswordAuthenticationToken deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
		UsernamePasswordAuthenticationToken token = null;
		ObjectMapper mapper = (ObjectMapper) jp.getCodec();
		JsonNode jsonNode = mapper.readTree(jp);
		Boolean authenticated = readJsonNode(jsonNode, "authenticated").asBoolean();
		JsonNode principalNode = readJsonNode(jsonNode, "principal");
		Object principal = null;
		if (principalNode.isObject()) {
			principal = mapper.readValue(principalNode.traverse(mapper), Object.class);
		} else {
			principal = principalNode.asText();
		}
		JsonNode credentialsNode = readJsonNode(jsonNode, "credentials");
		Object credentials;
		if (credentialsNode.isNull() || credentialsNode.isMissingNode()) {
			credentials = null;
		} else {
			credentials = credentialsNode.asText();
		}
		List<GrantedAuthority> authorities = mapper.readValue(
				readJsonNode(jsonNode, "authorities").traverse(mapper), new TypeReference<List<GrantedAuthority>>() {
		});
		if (authenticated) {
			token = new UsernamePasswordAuthenticationToken(principal, credentials, authorities);
		} else {
			token = new UsernamePasswordAuthenticationToken(principal, credentials);
		}
		JsonNode detailsNode = readJsonNode(jsonNode, "details");
		if (detailsNode.isNull() || detailsNode.isMissingNode()) {
			token.setDetails(null);
		} else {
			token.setDetails(detailsNode);
		}
		return token;
	}
@ Override public UsernamePasswordAuthenticationToken deserialize ( JsonParser jp , DeserializationContext ctxt ) throws IOException , JsonProcessingException { UsernamePasswordAuthenticationToken token = null ; ObjectMapper mapper = ( ObjectMapper ) jp . getCodec ( ) ; JsonNode jsonNode = mapper . readTree ( jp ) ; Boolean authenticated = readJsonNode ( jsonNode , "authenticated" ) . asBoolean ( ) ; JsonNode principalNode = readJsonNode ( jsonNode , "principal" ) ; Object principal = null ; if ( principalNode . isObject ( ) ) { principal = mapper . readValue ( principalNode . traverse ( mapper ) , Object . class ) ; } else { principal = principalNode . asText ( ) ; } JsonNode credentialsNode = readJsonNode ( jsonNode , "credentials" ) ; Object credentials ; if ( credentialsNode . isNull ( ) || credentialsNode . isMissingNode ( ) ) { credentials = null ; } else { credentials = credentialsNode . asText ( ) ; } List < GrantedAuthority > authorities = mapper . readValue ( readJsonNode ( jsonNode , "authorities" ) . traverse ( mapper ) , new TypeReference < List < GrantedAuthority > > ( ) { } ) ; if ( authenticated ) { token = new UsernamePasswordAuthenticationToken ( principal , credentials , authorities ) ; } else { token = new UsernamePasswordAuthenticationToken ( principal , credentials ) ; } JsonNode detailsNode = readJsonNode ( jsonNode , "details" ) ; if ( detailsNode . isNull ( ) || detailsNode . isMissingNode ( ) ) { token . setDetails ( null ) ; } else { token . setDetails ( detailsNode ) ; } return token ; }
This method construct {@link UsernamePasswordAuthenticationToken} object from serialized json.
@param jp the JsonParser
@param ctxt the DeserializationContext
@return the user
@throws IOException if a exception during IO occurs
@throws JsonProcessingException if an error during JSON processing occurs
This method construct {