Posts Tagged ‘groovy’

Grails i kerberos

Monday, July 25th, 2011

W poniższym artykule opiszę, jak w kilku krokach umożliwić aplikacji stworzonej przy pomocy grails 1.3.7 autoryzację z wykorzystaniem Kerberosa (W naszym przypadku Windows 2008 R2).

1. Instalujemy pluginy grails: spring-security-core oraz spring-security-kerberos

$grails install-plugin spring-security-core
$grails install-plugin spring-security-kerberos 

2. Dodajemy użytkownika w Active Directory, który posłuży nam do zarejestrowania SPN (Service Principal Name) naszej aplikacji

 Setspn -a http/<computername>.<domainname> <domain-user-account>

uwagi: <computername>.<domainname> musi się dokładnie tak samo nazywać, jak host, gdzie później będzie uruchomiona aplikacja.

 

3. Generujemy na serwerze domenowym plik keyTab.

ktpass /out kerberos.keytab /mapuser <domain-user-account>@<DOMAIN.HOST.FULL.NAME> /princ HTTP/<computername>.<domainname>@<DOMAIN.HOST.FULL.NAME> /pass * 

4. Wygenerowany plik umieszczamy w miejscu dostępnym dla naszej aplikacji.

5. Dodajmy wpisy do pliku konfiguracyjnego Config.groovy.

grails.plugins.springsecurity.kerberos.ticketValidator.servicePrincipal = 'HTTP/<computername>.<domainname>@<DOMAIN.HOST.FULL.NAME>'
grails.plugins.springsecurity.kerberos.ticketValidator.keyTabLocation = 'file:///home/grails/kerberos.keytab'

6. W przeglądarce konfigurujemy zaufaną witrynę (tutaj firefox 4) :


url: about:config

network.negotiate-auth.trusted-uris: <computername>.<domainname>

org.hibernate.MappingException przy próbie deploy aplikacji grails na serwerze aplikacji glassfish v3

Thursday, March 18th, 2010

Krótko i treściwie będzie.

Otrzymałem aplikację do opublikowania od jednego z developerów, aplikacja była utworzona w nowym frameworku, który ostatnio jest na tapecie u nas – grails . Jako serwera aplikacji używamy glassfisha w wersji 3, który sobie pracuje na debianie.

Standardowo:

asadmin --port 4849 deploy /path.to.app.war

i niestety, glassfish odezwał się do mnie niemiło:

com.sun.enterprise.admin.cli.CommandException: remote failure: Exception while loading the app :
java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'messageSource': Initialization of bean failed;
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with
name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property
'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is
org.hibernate.MappingException: Type [null] is not a basic type or a domain class and cannot be mapped.
Either specify a type within the [mapping] block or use a basic type (String, Integer etc.)

Co dalej?
Developer wspomniał, że dokonywał paru zmian w klasach domenowych (aplikacja już była wcześniej publikowana z sukcesem!)
, więc postanowiliśmy wyczyścić projekt, zanim zostanie utworzony plik war, więc:

grails clean
grails war

Tym razem deploy zakończył się sukcesem!

Application deployed successfully with name KalendarzPracownika-0.1.
Command deploy executed successfully.