Ich habe gerade die oben erwähnte Anforderung implementiert. Mein System verwendet Restful Jersey 1.17
, Spring Security 3.0.7
, Jackson 1.9.2
. Aber die Lösung hat nichts mit Jersey Restful API zu tun, und Sie können es auf jeder anderen Art von Servlet Containern verwenden.
Dies sind die gesamten 5 Schritte meiner Lösung:
Zuerst sollten Sie eine Annotation-Klasse für Ihren Zweck erstellen, so:
Dann ein Annotation Introspector, die meisten Methoden sollten null
zurückgeben, die Methoden je nach Bedarf ausfüllen, für meine Requirements habe ich gerade isIgnorableField
verwendet. Feature
ist Meine Implementierung für die GrantedAuthority-Schnittstelle. So:
Jersey-Server haben einen Standard ObjectMapper
für ihre Serialisierung / Deserialisierung. Wenn Sie ein solches System verwenden und den Standard-ObjectMapper ändern möchten, stehen Ihnen die Schritte 3, 4 und 5 zur Verfügung, ansonsten können Sie diesen Schritt lesen und Ihre Arbeit ist hier erledigt.
Sie sollten javax.ws.rs.core.Application
erweitern und Ihren Klassennamen in Web.xml angeben. Meine ist RestApplication.Wie das:
und das ist der letzte Schritt. Sie sollten Ihre Anwendungsklasse (ab Schritt 4) in Ihrer web.xml:
angebenund ab jetzt müssen Sie nur noch die @ JsonSpringView-Annotation Hinter jeder gewünschten Eigenschaft erwähnen. So:
Für diejenigen, die hier von Google landen, ist hier eine ähnliche Lösung mit Spring Boot 1.4.
Definieren Sie Schnittstellen für jede Ihrer Rollen, z. B.
%Vor% Deklarieren Sie @JsonView
in Ihren Entitäten, z. B.
Und definieren Sie @ControllerAdvice
, um das richtige JsonView
basierend auf den Rollen zu übernehmen:
Es ist auch möglich, einen benutzerdefinierten JSON-Verarbeitungsfilter zu schreiben (zB basierend auf JSON Pointers < (a)), es wird ein bisschen komplex zu tun sein.
Die einfachste Möglichkeit besteht darin, ein eigenes DTO zu erstellen und nur die Eigenschaften zuzuordnen, zu denen der Benutzer berechtigt ist.
Tags und Links spring jackson spring-security