[Grails eXchange] Session Acegi on Grails, Security on Grails (Tusyoshi Yamamoto)
acegi ist für Authentifizierung und Authorisierung zuständig. Tusyoshi kommt aus Japan und hat's erfunden. Es gibt ein Acegi-Plugin für Grails. Bis Ende diesen Jahres heißt es noch Acegi, danach Security.
Die Technik dahinter ist schnell erklärt: ein Filter, der auf konfigurierbare URL-Patterns anspringt, leitet bei Bedarf den Request auf eine Login-Seite weiter. Es gibt Support für single sign on, LDAP, x509 uvm. Sehr umfangreich, erweiterbar, flexibel. Ab geht's zu Grails.
In Grails selbst hat mit dem Plugin eine Datei namens "AcegiConfig.groovy" zur Kontrolle des Verhaltens von Acegi. Soweit ich weiss gibt es dort die entsprechenden Defaulteinstellungen, die man ändern kann, wenn man möchte. Es gibt darüber hinaus bestimmte Domainklassen, Controller, Taglibs usw., die z.B. User repräsentieren o.ä. Man kann dann in der BootStrapklasse entsprechende Stammdaten wie Personen, Rechte und Mappings angeben.
Jetzt greift er in die Tasten und demonstriert live auf der grünen Wiese das Plugin im Einsatz. Er installiert das Plugin und legt die Domänen-Klassen an. Mir fällt auf, wie viel Wert er auf die Konfigurierbarkeit des Plugins legt. Per Default wird z.B. u.a. die Klasse Auhtority angelegt. Man kann das aber auch umbenennen in Role. Dies Konfigurations-Denke ist in Grails aus meiner Sicht fehl am Platz.
Wie auch immer: Als Tusyoshi dann die WebApp startet, sieht alles nett aus. Es gibt einen Login- und einen Logoutcontroller, der das Verhalten der Anwendung entsprechend steuert. Sieht einfach und gut aus.
Es gibt Taglibs für Grails, die Bereiche einer Webseite entsprechend aus- bzw. einblenden können je nach Rolle des Users. Darüber hinaus gibt's Tags um sich Infos über den gerade angemeldeten User anzuzeigen oder Infos darüber, ob überhaupt jemand angemeldet ist.
Hm, irgendwie komisch, wenn da ein Plugin Dinge in meine Domainklassen packt, die ich eigentlich gar nicht in meiner Domäne haben will.
Per URL Login und Logout zu managen ist vielfach ok, aber manchmal möchte man das auch auf Service- oder Controllerebene erledigen. Kann man: Das Grailsplugin bietet entsprechende Aufrufe in Controllern und Services an.
Das Grailsplugin unterstützt auch Ajax-Security. Dabei wird dann der Request beim Filtern nicht auf die Login-Seite weitergeleitet, sondern ein kleiner Rahmen wird aufgemacht, in dem man sich einloggen kann.
Per AOP kann man auch noch Services sichern - aber das passt einfach nicht mehr in den Rahmen dieser Veranstaltung, hat doch der Speaker bereits 10 Minuten überzogen.
Acegi scheint genau das zu tun, was man erwarten könnte. Gut so. Die Einbettung in Grails könnte noch besser sein, aber Tusyoshi meinte, dass er gerade an weiteren Features arbeitet. Bin gespannt, wohin das noch führt.
Der Vortrag selbst war übrigens ganz amüsant: Tusyoshi hatte eine Übersetzerin zur Hand, die er allerdings nur zweimal konsultieren musste. Dabei haben sie sich ziemlich lange über eine kurze Frage aus dem Publikum unterhalten :-) Insgesamt hat der Vortrag und der Vortragende einen guten Eindruck hinterlassen bei mir.