Ich benutze Feder MVC, und ich habe ein benutzerdefiniertes Authentifizierungs-/Sicherheitssystem, das ich bauen musste.Wie kann sichergestellt werden, dass der Benutzer auf der Controller-Ebene im System angemeldet ist?
NOTE: I know of spring security, but my requirements were to do this in a custom way so please not looking for suggestions about using spring's security modules.
Wenn sich der Benutzer beim System anmeldet, wird ein Sitzungscookie erstellt. Wenn der Benutzer eine Seite besucht, sucht ein Interceptor nach dem Vorhandensein dieses Cookies und sucht in mysql nach der Sitzungs-GUID. Falls vorhanden, lädt er einige Daten und speichert sie in den Attributen der Anfrage.
Jetzt für Seiten, auf denen der Benutzer angemeldet sein muss, wie kann ich den Zugriff auf der Controller-Ebene beschränken?
Ich tue dies in einem Interceptor könnte:
if url.contains("projects/") ...
Wenn ich nur Zugriff auf Benutzer im ProjectController angemeldet einschränken wollen, aber das ist nicht wirklich etwas, was ich tun möchte.
Aber ich suche nach einer Annotation, die ich auf der Controller-Ebene hinzufügen könnte, oder vielleicht irgendwie einen BaseController erstellen, den alle Controller erben, die einen angemeldeten Benutzer benötigen.
Was sind meine Optionen für so etwas?
In ASP.NET, habe ich eine Base, und der Controller einen Ereigniszyklus hat, und in dem vor-Aktion gefeuert Ereignisse überprüfte ich, wenn der Benutzer sehen angemeldet wurde.
Also für Anregungen suchen Federmvc?
aktualisiert
Zum Beispiel in ASP.NET Sie 2 Methoden, 1, die kurz vor der Steuerung Aktionsmethode und einem Feuer, das Feuer nach:
Controller.OnActionExecuting
Controller.OnActionExecuted
http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onactionexecuting.aspx
So in der OnActionExecuting kann ich tatsächlich genau sehen, welcher Controller ich bin, und welche Aktion wird auf eine programmatische Weise aufgerufen werden, nicht durch Blick auf th e Anfrage-URL und vergleicht dann tun Zeichenfolge, um zu sehen, ob es eine bestimmte Controller usw.
So in diesem Fall kann ich einfach für Dinge in Cookies oder in meiner Anfrage überprüfen Attribute usw.
Dies ist ein viel stabileren Weg, hat Frühling etwas ähnliches?
Werfen Sie einen Blick auf Spring AOP, es bietet die gleiche Funktionalität wie von 'Controller.OnActionExecuting' und' Controller.OnActionExecuted' mit 'Before' und' Afer' Advices. – Logan