-
Compilez le code de l'énoncé.
Exécutez le avec les différentes valeurs possibles d'argument (ROOT, ADMIN, USER).
Vous pouvez constater que la classeSensible
n'est pas du tout protégée. -
Implémentez la classe
Proxy
permettant de filtrer les utilisations deSensible
.
Dansmain()
, remplacezSensible sensible = new Sensible();
par :Proxy sensible = new Proxy();
Les appels avec les différentes valeurs de l'argument doivent donner :java TestProtectionProxy ROOT rootMethod called with role ROOT adminMethod called with role ROOT userMethod called with role ROOT
java TestProtectionProxy ADMIN rootMethod : Acces denied adminMethod called with role ADMIN userMethod called with role ADMIN
java TestProtectionProxy USER rootMethod : Acces denied adminMethod : Acces denied userMethod called with role USER
-
Dans le code précédent, l'utilisation de
Proxy
permet effectivement de protéger l'accès à la classeSensible
.
Complétez le code en introduisant une interfaceISensible
de manière à fournir une implémentation fidèle du pattern.
Et remplacez dans le codeProxy sensible = new Proxy();
parISensible sensible = new Proxy();
-
(Dépasse le cadre du pattern)
L'implémentation précédente permet toujours d'écrire du code appelant directement la classeSensible
.
Comment pourrait-on bloquer toute utilisation directe de cette classe ?