Module Waffle : exclusion

David Gothel · le 13/02/15 à 16:04

Bonjour.

Nous aurions besoin d'exclure certaines URL du traitement par le SSO (module Waffle).
Est ce qu'il y a une solution de paramétrage permettant cela ?

Nous avons besoin de faire appeler par des CRON des urls d'export (Environnement windows avec SSL).

 

Cordialement

16 pts
Olivier Jaquemet · le 13/02/15 à 19:35

Bonjour,

C'est possible en utilisant les règles d'accès ("Access rules"),

  • la configuration d'une AccessRule est évoqué dans la documentation du module (dans la version anglaise)
  • vous pouvez consultez la javadoc des AccesRules, incluant de nombreux exemples dans le module lui même, dans le répertoire plugins\PluginWaffle\docs\javadoc\access-rules\
  • La règle qui vous intéresse est probablement la UriAccessRule
1 pt
David Gothel · le 16/02/15 à 09:47

Merci beaucoup Olivier.

je vais regarder cela de suite.

0 pt
thomas lavocat · le 23/02/15 à 14:34

Bonjour Olivier,

En suivant la documentation, j'ai essayé de mettre en place la manipulation conseillée.

Code du web.xml :

  <filter>
   <filter-name>MyHttpFilter</filter-name>
   <init-param>
       <param-name>access-rule.class</param-name>
       <param-value>com.jalios.jcms.authentication.rules.UriAccessRule</param-value>
   </init-param>
   <init-param>
       <param-name>uri-access-rule.regex</param-name>
       <param-value>^.*(cron|import|export).*\.jsp$</param-value>
   </init-param>
  </filter>

Lorsque le client redémarre sa webapp, il a une page blanche à la place de la page d'accueil.

Où est-ce que je me suis trompé ?

#1

Dans la doc les exemples sont indiqués avec "MyHttpFilter" mais dans le cas du module Waffle il a certainement été configuré avec un filtre nommé "WaffleHttpFilter". C'est le filtre de Waffle qu'il faut modifier pour ne pas appliquer le sso dans les cas qui vous intéressent.

Si vous disposez déjà d'une règle dans votre filtre, tel qu'un "UserAgentAccessRule", il vous faudra combiner les 2 règles à l'aide du "MetaAccessRule". Une autre solution peut être de développer votre propre AccessRule.

Enfin, attention le principe de l'accessRule est que si le pattern match alors on active le SSO.

Ronan Kerdudou · le 24/02/15 à 00:28
0 pt
Philippe Lemoine · le 23/03/15 à 10:12

Bonjour,

Une solution possible est d'activer le SSO seulement pour un host donné via la HostnameAccessRule.

Ex :

        <init-param>
            <param-name>access-rule.class</param-name>
            <param-value>com.jalios.jcms.authentication.rules.HostnameAccessRule</param-value>
        </init-param>
        <init-param>
            <param-name>hostname-access-rule.regex</param-name>
            <param-value>^intranet\.prod\.prv$</param-value>
        </init-param>
        <init-param>

Dans l'exemple donné, le site est en SSO pour le domaine intranet.prod.prv

Si vous configurez un autre host pointant sur votre serveur (ex : exportintranet.prod.prv), celui-ci n'utilisera pas le SSO et vous pourrez appeler vos url d'export avec une clé d'authentification authKey.

#1

Merci pour cette idée intéressante :-)

Ronan Kerdudou · le 23/03/15 à 10:57
0 pt
Ronan Kerdudou · le 23/03/15 à 11:02

Pour capitaliser, voici la proposition du support :

Les access-rules fonctionnent en white-list avec des expressions régulières, et de manière générale les expressions régulières fonctionnent dans cette logique de white-list et sont très difficile à faire fonctionner en exclusion (si ce n'est impossible).

La solution pour inverser une rêgle c'est de la faire directement dans le code du access-rule en en créant un custom, ou alors d'utiliser la MetaAccessRule qui permet de former une expression sur les résultats d'autres accessRules.

Voici par exemple la configuration proposée :

 

  <init-param>
    <param-name>access-rule.class</param-name>
    <param-value>com.jalios.jcms.authentication.rules.MetaAccessRule</param-value>
  </init-param>
  <init-param>
    <param-name>meta-access-rule.expression</param-name>
    <param-value>!(ipListToExclude)</param-value>
  </init-param>
  <init-param>
    <param-name>meta-access-rule.ipListToExclude.class</param-name>
    <param-value>com.jalios.jcms.authentication.rules.IpAccessRule</param-value>
  </init-param>
  <init-param>
    <param-name>meta-access-rule.ipListToExclude.regex</param-name>
    <param-value>^(192\.168\.123\.45)|(127\.0\.0\.1)$</param-value>
  </init-param>
1 pt
David Gothel · le 02/06/15 à 17:59

Et pour partager l'info des fois que d'autres puissent avoir ce besoin :

 Il est possible de passer outre Waffle comme cela :

 

Plus simple que de faire des règles complexes, ils est possible d'ajouter ce header dans la requete HTTP depuis le cron :

X-Jalios-AuthenticateWithWindows: false
cela exploite l'évolution WAFFLE-6 dispo à partir de la version 1.2 du module

exemple avec curl :

curl -H "X-Jalios-AuthenticateWithWindows: false" http://jcms.example.com/
2 pts