Ich möchte mit JSON auf der Wicket-Seite kommunizieren! Übrigens mit einer verschlüsselten Anfrage ...
Setzen Sie den öffentlichen Schlüssel auf pubKey.
myjsencrypt.js
my.jsencrypt = {
pubKey: '-----BEGIN PUBLIC KEY-----\
Inhalt des öffentlichen Schlüssels
-----END PUBLIC KEY-----\
'
Initialisieren.
myjsencrypt.js
// encryption setting
var encrypt = new JSEncrypt();
encrypt.setPublicKey(my.jsencrypt.pubKey);
Wirf eine Anfrage.
myjsencrypt.js
// request
var xhr = new XMLHttpRequest();
xhr.open("POST",Ziel-URL, true);
xhr.setRequestHeader("content-type", "application/json");
xhr.send( encrypt.encrypt(JSON.stringify(data)) );
Es scheint verschiedene Dinge zu geben, aber jackson schien gut zu sein, also habe ich versucht, es zu verwenden. Es ist eigentlich einfach zu bedienen. Stellen Sie es einfach in pom.xml ein.
pom.xml
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.2</version>
</dependency>
Holen Sie sich die Anfrage und machen Sie sie zu einem Parameter. Informationen zu RSAUtil finden Sie unter RSA-Verschlüsselung / Entschlüsselung mit Java 8.
MyJsonPage.java
RequestCycle requestCycle = getRequestCycle();
final WebRequest webRequest = (WebRequest) getRequest();
final HttpServletRequest rawRequest = (HttpServletRequest) webRequest.getContainerRequest();
BufferedReader br = null;
JsonFactory jsonFactory = new JsonFactory();
ObjectMapper jsonMapper = new ObjectMapper(jsonFactory);
// <Parametername,Wert>Machen Sie eine Karte von
TypeReference<ConcurrentHashMap<String,String>> typeRef = new TypeReference<ConcurrentHashMap<String,String>>(){};
try {
StringBuffer sb = new StringBuffer();
br = rawRequest.getReader();
for (String line = br.readLine(); line != null; line = br.readLine()) {
sb.append(line);
}
// decrypt RSA input
PrivateKey privKey = RSAUtil.readPrvateKeyFromPem(Private Schlüsseldatei);
String decrypted = RSAUtil.decryptWithPrivateKey(sb.toString(), privKey);
// decrypted params to json map
inputJsonMap = jsonMapper.readValue(decrypted, typeRef);
} catch (Exception e) {
/*Fehlerbehandlung*/
}
Nachdem Sie die Parameter erhalten haben, verarbeiten Sie diese Seite ...
Bereiten Sie eine Methode zum Festlegen des Inhaltstyps vor.
MyJsonPage.java
// Set content-type
protected String getContentType() {
final String encoding = getApplication().getRequestCycleSettings().getResponseRequestEncoding();
return "application/json; charset=" + encoding;
}
Gibt den JSON für das Ergebnis zurück.
MyJsonPage.java
// build JSON response
try {
jsonResponse = jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(returnObject);
} catch (JsonProcessingException e) {
/*Fehlerbehandlung*/
}
requestCycle.scheduleRequestHandlerAfterCurrent(
new ResourceStreamRequestHandler(
new StringResourceStream(jsonResponse) ) {
@Override
public void respond(IRequestCycle requestCycle) {
((WebResponse) requestCycle.getResponse()).setContentType(getContentType());
super.respond(requestCycle);
}
}
);
Dies ist praktisch, da es von Object in JSON konvertiert. PrettyPrinter ist enthalten, da es leicht zu sehen ist.
das ist alles. Danke für deine harte Arbeit!
Recommended Posts