Sto usando Jersey nella mia applicazione Web. I dati inviati al server sono in formato JSON, che a sua volta è unmarshalled sul server-end e l'oggetto ottenuto viene utilizzato in ulteriore elaborazione. L'audit di sicurezza ha sollevato alcune vulnerabilità per questo approccio.Come gestire le eccezioni del parser durante lo smantellamento dei dati JSON?
My Code Riposo:
@POST
@Path("/registerManga")
@Produces(MediaType.APPLICATION_JSON)
public Response registerManga(MangaBean mBean){
System.out.println(mBean);
return Response.status(200).build();
}
MangaBean:
public class MangaBean {
public String title;
public String author;
@Override
public String toString() {
return "MangaBean [title=" + title + ", author=" + author + "]";
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
I dati vengono inviati in questo formato:
["title":"Bleach","author":"kubo tite"]
I dati sopra riportati deserializzati con successo in un oggetto e mi ottenere questo come output:
MangaBean [title=Bleach, author=kubo tite]
Ma se i dati viene modificato in:
["title":"<script>alert("123");</script>","author":"kubo tite"]
si verifica un errore del server interno 500 e viene visualizzato all'utente:
javax.servlet.ServletException: org.codehaus.jackson.JsonParseException: Unexpected character ('1' (code 49)): was expecting comma to separate OBJECT entries
at [Source: [email protected]; line: 1, column: 28]
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
L'imprevisto di ""
sta provocando errori nella parser. Dato che l'unmarshalling è fatto dietro le quinte e non ho il controllo su di esso, non sono in grado di gestire l'eccezione che viene sollevata.
La mia domanda è come posso gestire questa eccezione e restituire una risposta corretta all'utente invece di uno stacktrace. Per favore consiglio
Non capisco veramente come utilizzare la sintassi @Provider. Posso usarlo per gestire il seguente scenario: L'API indisciplinata restituisce [] quando una mappa è vuota anziché {}. Sembra che da quanto sopra, ho potuto mappare questa eccezione e gestirlo? – deepwinter
Non riesco a far funzionare tutto questo in Jersey 2.13. Ugh. –
Stiamo usando CXF, ma questo ha funzionato comunque. Grazie! – fool4jesus