sobota, 6 lutego 2010

Tagi Spring Security i Facelets

Ostatni projekt przy którym pracowałem zmusił mnie do ponownego spotkania ze Spring Security. Wcześniej pracowałem z tym świetnym frameworkiem przy okazji pisania pracy inżynierskiej. Wtedy nie miałem praktycznie żadnych problemów z osadzeniem go w projekcie i podpięciem wszystkich funkcji (wielka chwała Mateuszowi Zięba za wpis na jego blogu - Bezpieczeństwo szybko, łatwo i przyjemnie czyli wstęp do Spring Security - polecam!). Tym razem Spring trochę mnie nie słuchał :)
Pojawił się problem całkowitego ignorowania tagów spring security w kodzie szablonu, silnik renderujący po prostu wyrzucał je do wynikowego HTMLa. Nie mogąc znaleźć na to rozwiązania spytałem grupę dyskusyjną o pomoc w sprawie, gdzie otrzymałem sugestie, że być może tagi springowe nie są kompatybilne z Facelets który był używany w projekcie. Okazało się to strzałem w dziesiątkę! Wersja Spring Security z którą wtedy pracowałem to 2.0.5 i wtedy (nie wiem jak jest z ver. 3.0 ? Ktoś wie ?) nie było tagów zgodnych z Facelets :-/
Z pomocą przyszedł wujek Google i projekt Spring Security Facelets Tag Library. Jest to autorskie rozwiązanie, ale gdzieś przeczytałem, że trwają rozmowy nad integracją ze Springiem.
Projekt jest bardzo ciekawy ponieważ rozwijane są wersje zgodne z JSF 1.2 jak i 2.0 oraz Spring Security 2.0 jak i 3.0.
No ale wracając to konkretów, biblioteka definiuje własne tagi działające z Facelets. Ich nazwy trochę odbiegają od tych w Springu ale możliwości są te same. Aby ich użyć w szablonie należy dodać namespace: http://www.springframework.org/security/facelets/tags
Drobne przykłady:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jstl/core" 
      xmlns:security="http://www.springframework.org/security/facelets/tags">
<ui:composition>
 <f:view>
  <security:ifNotGranted roles="ROLE_ADMIN">
     <h:outputText value="Użytkownik nie ma uprawnienia ROLE_ADMIN" />
  </security:ifNotGranted>
  <security:ifAnyGranted roles="ROLE_USER, ROLE_ADMIN">
     <h:outputText value="Użytkownik posiada chociaż jedno z uprawnień, ROLE_USER lub ROLE_ADMIN" />
  </security:ifAnyGranted>
  <security:ifAllGranted roles="ROLE_BOSS, ROLE_ADMIN">
     <h:outputText value="Użytkownik posiada oba uprawnienia, ROLE_BOSS oraz ROLE_ADMIN" />
  </security:ifAllGranted>
 </f:view>
</ui:composition>
</html> 
I wszystko ładnie śmiga :)

Brak komentarzy:

Prześlij komentarz