12 stycznia 2009

cas-client idzie w odstawkę - acegi ciekawsze

Po ostatnich nieudanych bojach z wtyczką Grails do Wicketa zabrałem się za kolejne. Przeglądając dostępne wtyczki poleceniem grails list-plugins wybrałem cas-client. I to z czysto pragmatycznego powodu - wersja 1.0 daje pewną gwarancję stabilności wtyczki, a i tak miałem rozpoznać temat wykorzystania JA-SIG CAS, więc połączę przyjemne z pożytecznym.
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails plugin-info cas-client
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\projs\WicketGrailsDemo
Running script c:\dev\grails\scripts\PluginInfo_.groovy
Environment set to development
Reading remote plugin list ...

--------------------------------------------------------------------------
Information about Grails plugin
--------------------------------------------------------------------------
Name: cas-client | Latest release: 1.0
--------------------------------------------------------------------------
This plugin provides client integration for JA-SIG CAS
--------------------------------------------------------------------------
Author: Chen Wang
--------------------------------------------------------------------------
Author's e-mail: contact@chenwang.org
--------------------------------------------------------------------------
Find more info here: http://grails.org/CAS+Client+Plugin
--------------------------------------------------------------------------

The plugin handles configurations of JA-SIG CAS client integration using
its Java client library versioned 2.1.1. Please note there is another Java
client library which is heavily Spring based; Although it seems a natual
fit for Grails applications, it requires more configuration works to
kickstart.

The client integration page of the library supported by this plugin is

http://www.ja-sig.org/products/cas/client/javaclient/index.html

Please make sure necessary configurations are made in your Grails
application's Config.groovy file.

--------------------------------------------------------------------------
Available full releases: 0.1 0.2 1.0

To get info about specific release of plugin 'grails plugin-info [NAME] [VERSION]'

To get list of all plugins type 'grails list-plugins'

To install latest version of plugin type 'grails install-plugin [NAME]'

To install specific version of plugin type 'grails install-plugin [NAME] [VERSION]'

For further info visit http://grails.org/Plugins
Instalacja przebiegła bez zakłóceń i po chwili miałem już ją zainstalowaną w mojej przykładowej aplikacji.
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails install-plugin cas-client
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\projs\WicketGrailsDemo
...
Plugin cas-client-1.0 installed
Otwieram projekt WicketGrailsDemo w NetBeans IDE bez problemu - wystarczy wskazać katalog projektu i NetBeans zadba o resztę (doda ikonkę i pogrupuje artefakty projektowe we właściwych kategoriach). Uruchamiam (menu Run) i w międzyczasie otrzymuję komunikat:

CAS CLIENT PLUGIN ERROR: Please make sure that required parameters [cas.loginUrl, cas.validateUrl, cas.urlPattern] are set up correctly in Config.groovy of your application!
PLEASE CORRECT THE ERROR ABOVE!


Idzie wspaniale - lubię być prowadzony za rękę przy nowym oprogramowaniu. W końcu kto jak nie autorzy wiedzą, które cechy projektu są najciekawsze i jak ich użyć najefektywniej?! Komunikat wpisuję na listę zalet wtyczki.

Potrzebowałem zmienić trochę widok aplikacji, więc pora na kolejne polecenie Grails - generate-views
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails generate-views
Welcome to Grails 1.1-beta2 - http://grails.org/
Licensed under Apache Standard License 2.0
Grails home is set to: c:/dev/grails

Base Directory: C:\projs\WicketGrailsDemo
Running script c:\dev\grails\scripts\GenerateViews.groovy
Environment set to development
[groovyc] Compiling 1 source file to
C:\Documents and Settings\Administrator\.grails\1.1-beta2\projects\WicketGrailsDemo\classes
CAS CLIENT PLUGIN INFO: added section in web.xml
CAS CLIENT PLUGIN INFO: added section(s) in web.xml
CAS CLIENT PLUGIN INFO: /cas.gsp?u=USERNAME is available for mocking cas-ified user session
CAS CLIENT PLUGIN WARNING: Please take extra care as mocking should NOT be allowed for production environment!
Domain Class name not specified. Please enter:
Slowo
[groovyc] Compiling 1 source file to
C:\Documents and Settings\Administrator\.grails\1.1-beta2\projects\WicketGrailsDemo\classes
CAS CLIENT PLUGIN INFO: added section in web.xml
CAS CLIENT PLUGIN INFO: added section(s) in web.xml
CAS CLIENT PLUGIN INFO: /cas.gsp?u=USERNAME is available for mocking cas-ified user session
CAS CLIENT PLUGIN WARNING: Please take extra care as mocking should NOT be allowed for production environment!
Generating views for domain class Slowo ...
Finished generation for domain class Slowo
Po chwili jednak, kiedy kończyłem lekturę dokumentacji wtyczki w Alternatives to using the Java CAS client natrafiłem na wzmiankę o Acegi Security. Już nim kiedyś się zajmowałem, ale niedługo i nigdy nie było czasu na więcej. Jakoś bliżej mi było do niego niż cas-client, więc od razu przeskoczyłem na kolejną wtyczkę acegi.
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails install-plugin acegi
...
Plugin acegi-0.4.1 installed
Plug-in provides the following new scripts:
------------------------------------------
grails create-auth-domains
grails generate-manager
grails generate-registration
Od razu widać, że bardziej rozbudowana, skoro wprowadza swoje polecenia. Zaczerpnięcie języka o wtyczce rozpoczynam od standardowego grails plugin-info:
 jacek@dev /cygdrive/c/projs/WicketGrailsDemo
$ grails plugin-info acegi
Welcome to Grails 1.1-beta2 - http://grails.org/
...
--------------------------------------------------------------------------
Information about Grails plugin
--------------------------------------------------------------------------
Name: acegi | Latest release: 0.4.1
--------------------------------------------------------------------------
Grails Spring Security 2.0 Plugin
--------------------------------------------------------------------------
Author: Tsuyoshi Yamamoto
--------------------------------------------------------------------------
Author's e-mail: tyama@xmldo.jp
--------------------------------------------------------------------------
Find more info here: http://grails.org/AcegiSecurity+Plugin
--------------------------------------------------------------------------
Plugin to use Grails domain class and secure your applications with Spring Security filters.
--------------------------------------------------------------------------
Available full releases: 0.2 0.2.1 0.3 0.4 0.4.1
Rzut oka na stronę wtyczki Spring Security Plugin i ma się wrażenie, że wszystko jest. Strona jest wręcz doskonała - wszystko opisane krok po kroku, poza jednym drobnym acz istotnym elementem - nazwą dołączanej strony - _ajaxLogin.gsp zamiast _ajaxForm.gsp. Zaraz ją poprawiłem i już mam swój udział w rozwoju Grails (!) ;-) Dokumentacja nie pozostawia złudzeń, że wciąż mogę liczyć na wsparcie CASa (AcegiSecurity Plugin - Implementation Overview):

Optional support for LDAP, OpenID, Kerberos, CAS, and NTLM.

I w końcu data ostatniej zmiany wtyczki jest budująca - December 9, 2008. Zdaje się, że mam wszystko. "Niestety", właśnie w trakcie rozpoznawania wtyczki acegi dostaję informację o aktualizacji grailsowego Wiki, a konkretnie wpisu o Stark Security Plugin:

The Stark Security plugin -- 'stark' as in simple, but also 'strong' in Swedish -- is an implementation of Spring Security for Grails. The purpose of the plugin is two-fold, as its name implies: to be simple to install, configure, and maintain, and to strongly secure your web application.

a po chwili kolejna informacja o aktualizacji Wiki - tym razem już dotycząca AcegiSecurity Plugin - Upgrading from 0.4.1 to 0.5. I jeszcze kilka innych zmian w dokumentacji Acegi Security Plugin. Jakkolwiek cieszy możliwość wyboru, to dla nowicjusza, nie tylko w Grails, ale i w temacie bezpieczeństwa, może to być nie lada problem. Ja decyduję się na acegi. Nie mam dla niego wiele czasu, więc liczę, że mnie nie zawiedzie.

p.s. Właśnie dostałem książkę Beginning Groovy and Grails: From Novice to Professional, którą zamierzam przeczytać w nadchodzących dniach. Ciekawa? Ktoś już ją ma za sobą? Warta uwagi, czy raczej pozostać przy dokumentacji dostępnej publicznie?