On constate le comportement suivant avec une erreur à la fin quand on essaie d’accéder à une url utilisant l’URI_MAPPINGS et que notre session est expirée.
Steps to reproduce
Pour l’exemple je vais utiliser Firefox et Chrome mais le navigateur n’a pas d’importance.
Sur une instance Simplicité 6.3.5 avec le module de Démo.
[Firefox] Se connecter avec un compte designer.
[Firefox] Modifier le paramétrage du paramètre système URI_MAPPINGS pour mettre cette valeur dans valeur remplacée :
[Chrome] Au niveau de l’url de la page, remplacer /news par /ui/ext/DemoNews pour contourner l’URI_MAPPINGS.
L’erreur n’apparait plus et on est redirigé vers la mire de connexion de Simplicité.
[Chrome] Se reconnecter avec user_fra.
Pas d’erreurs, mais on arrive sur la page d’accueil et non le contenu de /ui/ext/DemoNews.
On a donc deux comportements étranges :
1er
Si URI_MAPPINGS utilisé et session expirée alors on a une erreur et l’utilisateur n’est pas invité à se reconnecter.
2nd
Une fois reconnecté Simplicité perd le contexte et on revient sur la page d’accueil au lieu d’arriver sur le contenu de la page demandée avant la reconnexion.
OK on va regarder mais la vocation historique de l’ URI_MAPPING est de mapper des choses plutôt en zone publique (y compris en zone API) = à des endroits où il n’y a pas de notion de session
Pour ce qui est de rerouter en zone UI authentifiée il vaut mieux utiliser les permalinks
Pour le contexte, à certains moment quand l’utilisateur souhaite consulter un document on doit rediriger celui-ci vers la visionneuse de ce doc présent en GED (le doc n’est pas stocké dans Simplicité).
On a donc fait un objet externe (API REST privée) avec le code Java suivant (simplifié au niveau de la construction de l’url externe) :
package com.simplicite.extobjects.Demo;
import com.simplicite.util.AppLog;
import com.simplicite.util.exceptions.HTTPException;
import com.simplicite.util.tools.Parameters;
import com.simplicite.webapp.tools.ServletTool;
/**
* Handles the redirection from the /viewer URL
*/
public class ViewerRedirect extends com.simplicite.webapp.services.RESTServiceExternalObject {
private static final long serialVersionUID = 1L;
@Override
public Object get(Parameters params) throws HTTPException {
try {
String docId = params.getParameter("doc-id");
sendHttpRedirect(params, getExternalViewerUrl(docId));
setHTTPStatus(ServletTool.HTTP_STATUS_MOVED_PERMANENTLY);
return ServletTool.HTTP_STATUS_MOVED_PERMANENTLY;
}
catch (Exception e) {
AppLog.error("An http error occurred during the redirection process to the GED", e, getGrant());
throw e;
}
return super.get(params);
}
private String getExternalViewerUrl(String docId) {
return "https://external.app.fr/"+docId;
}
}
On a mis en place cet objet externe pour les raisons suivantes :
Servir d’intermédiaire entre Simplicité et la page externe. Au niveau de notre code dans Simplicité on manipule uniquement des url internes qu’on maitrise et pour aller à l’extérieur on passe par cet objet externe qui va chercher/construire la bonne url externe.
L’url vers la page externe peut changer, on ne peut donc pas la stocker. Il faut appeler une api tierce qui va nous fournir l’url vers la page qu’on souhaite consulter.
Au début dans le postSearch de l’objet métier qui avait besoin de cette url externe on faisait l’appel à l’api tierce pour récupérer l’url sans utiliser cet objet externe mais au final sur l’affichage en liste ça faisait trop de requêtes en peu de temps et à la fin on atteignait les quota fixé par jour rapidement. Avec l’objet externe en intermédiaire on fait l’appel à l’api tierce uniquement quand l’utilisateur à vraiment besoin de celle-ci pour consulter la page externe.
Je viens d’essayer avec le deeplink mais je suis pas sûr que ça va fonctionner dans notre cas.
Avec le format /ui/l/deeplink?doc-id=5639DBFC je repasse par l’UI Simplicité et j’ai cette erreur :
L’URL /ui/l/suppliers-bim (qu’on obtient via le Copy link) accédée sans être connectée passe par la phase d’authent puis arrive bien sur le formulaire du supplier BIM
Désolé, j’ai mis deeplink mais je parlais bien du permalink.
Est-ce qu’on peut faire une redirection vers une page externe avec le permalink (retourner un http 301 avec l’url vers laquelle on souhaite rediriger sans repasser par l’UI Simplicité) ?
J’ai refait le test avec le module de Démo et avec le paramétrage et le code suivant :
Avec http://localhost:8083/ui/ext/DemoViewer?doc-id=test pas de problème je suis redirigé vers la page externe sans repasser par l’UI Simplicité. C’est ce comportement que j’essaie de reproduire avec le permalink.