Integration Apache Shiro et PrettyFaces

Shiro est une librairie java qui peut être utilisée pour gérer la sécurité d’une application web, standalone, ou mobile. Elle prend en charge l’authentification, les autorisations d’accès aux ressources, la cryptographie, et la gestion des sessions (cf http://www.infoq.com/articles/apache-shiro).

PrettyFaces est une librairie open source permettant de réaliser de la ré-écriture d’URL qui s’intègre avec la technologie JSF. Elle permet entre autre de créer des URLs qui peuvent être « bookmarquer »  (http://www.ocpsoft.org/prettyfaces/).

L’intégration de ces deux technologies est réellement très simple. Il suffit de déclarer les filtres nécessaires aux 2 librairies dans l’ordre suivant:

1/ filtre Shiro

Si vous utilisez Spring la déclaration est la suivante

Dans le descripteur de déploiement de l’application web « web.xml »


<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>

Dans le fichier de configuration de spring


<!-- BEGIN OF SHIRO CONFIGURATION -->

<!-- Enable Shiro Annotations for Spring-configured beans. only run after -->
<!-- the lifecycleBeanProcessor has run: -->

<!-- AUTO PROXY -->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
<property name="proxyTargetClass" value="true" />
</bean>

<!-- ADVISOR -->
<bean id="authorizationAttributeSourceAdvisor" class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager" />
</bean>

<!-- SECURITY MANAGER -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- Single realm app. If you have multiple realms, use the 'realms' property instead. -->
<property name="realm" ref="myRealm" />
</bean>

<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

<!-- SHIRO FILTER -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/connexion" />
<property name="successUrl" value="/welcome" />
<property name="unauthorizedUrl" value="/err404.jsp" />
<property name="filters">

<map>

</map>

</property>
<property name="filterChainDefinitions">
<value>
<!-- /connexion = ssl[8443],authc /accueil = anon /pages/** = authc *.xhtml = user -->
</value>
</property>
</bean>
<bean id="myRealm" class="org.apache.shiro.realm.jdbc.JdbcRealm">
<property name="dataSource" ref="madatasource" />
<property name="authenticationQuery" value="select password from user where email = ?" />
<property name="userRolesQuery" value="select role_name from user_roles where username = ?" />
<property name="permissionsQuery" value="select permission from roles_permissions where role_name = ?" />
</bean>

<!-- END OF SHIRO CONFIGURATION -->

2/ filtre PrettyFaces

La définition du filtre PrettyFaces peut être réalisée comme suit dans le fichier web.xml.

</pre>
<blockquote>
<filter>
<filter-name>Pretty Filter</filter-name>
<filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Pretty Filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ASYNC</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<pre>

Prenez garde à respecter l’ordre de déclaration de sorte que PrettyFaces puisse ré-écrire les URLs. Dans Shiro vous pouvez utiliser la nouvelle URL générée par PrettyFaces.

Dans la configuration Shiro / spring, il n’est pas nécessaire d’utiliser le fichier de configuration shiro.ini. La configuration est réalisée directement dans le fichier de configuration de spring.

Publicités

A propos jlerbsc

founder of JavaPerf Consulting Http://www.jperf.com
Cet article, publié dans tech notes, est tagué , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s