Authentifizierungsmuster für Java-Restful-Webdienste (jax rs)

9

Ich habe begonnen, JAX-RS zu verwenden, um eine einfache, erholsame Schnittstelle zu meiner Webanwendung zu erstellen. Derzeit wird es nur von einem internen Client verwendet (schreibgeschützt), der Zugriff auf alle Anwendungsdaten hat, und ich verwende die http-Standardauthentifizierung für den Zugriff. Ich möchte es als Teil der Ansichtsebene meiner App verwenden und bestimmte Vorgänge sind nur zulässig, wenn ein Benutzer über die Web-App angemeldet ist. Ich bemühe mich, ein Muster zu finden, mit dem ich beide Formen der Authentifizierung auf elegante Weise verwenden kann, ohne viel Code zu wiederholen. Hier ist ungefähr, was ich mir ausgedacht habe:

Zuerst eine Util-Klasse zum Laden einer Anwendungssitzung, die in der Datenbank gespeichert ist.

%Vor%

Hier ist unsere Ressource, mit einer Methode, die nur für einen authentifizierten Benutzer oder unseren HTTP-Basisauthentifizierungs-Client zugänglich ist:

%Vor%

Hier ist die einfachste Ansicht der AppSession für den Zweck dieser Frage:

%Vor%

Wie kann ich darüber hinaus für Dienste, die keine Authentifizierung erfordern, verhindern, dass unbefugte Dritte einfach auf die URL zeigen und die Daten in Ruhe abrufen?

    
Peter Anthony 26.07.2011, 18:35
quelle

1 Antwort

5

Sie kommen an den Punkt, an dem es sich lohnt, mit der aspektorientierten Programmierung die Sicherheitsaspekte von Ihrer Geschäftslogik zu trennen. Wenn Sie bereits Spring verwenden, um die Teile Ihrer App zu assemblieren (was ich für komplexe Server empfehle), ist es nur eine Frage des Hinzufügens von Spring AOP, um die Sicherheitslogik zu injizieren. Andernfalls verwenden Sie direkt AspectJ. Die eigentliche Logik, um die verschiedenen Anmeldemodi zu handhaben, wird wahrscheinlich benutzerdefiniert sein, aber Sie können sie zumindest in Quarantäne halten.

Wenn Sie Spring verwenden, sollten Sie Spring Security verwenden. das baut auf Spring AOP auf und liefert Ihnen viel mehr von der Lösung.

    
Donal Fellows 26.07.2011 19:39
quelle