Est-il possible d’avoir une url permettant d’accèder directement au rendu d’un objet externe dans l’UI Simplicité (en passant avant par l’authent login/mot de passe Simplicité ou SSO si besoin) ? et de pouvoir récupérer les éventuels paramètres passé dans l’url dans les paramètres de la méthode display() de l’objet externe ?
Le besoin serait d’avoir le même comportement que pour les urls suivantes :
Avec ces urls si l’utilisateur est déjà authentifié il arrive directement sur la bonne page et s’il n’est pas authentifié il passe par la page de connexion avant d’arriver directement sur la bonne page.
Merci j’arrive bien a accéder directement à la page de l’objet externe en utilisant le deeplink ou le permalink. Par contre quand j’utilise le permalink les paramètres passés dans l’url sont perdus.
Le code Java de DemoCatalog :
package com.simplicite.extobjects.Demo;
import java.util.*;
import com.simplicite.util.*;
import com.simplicite.util.exceptions.*;
import com.simplicite.util.tools.*;
/**
* UI component external object DemoCatalog
*/
public class DemoCatalog extends com.simplicite.webapp.web.ResponsiveExternalObject {
private static final long serialVersionUID = 1L;
// Note: in most cases no server-side Java code is needed
// Just implement the 3 client-side resources: HTML, SCRIPT (Javascript with the render function), STYLES
/*@Override
public void init(Parameters params) {
AppLog.warning("DEBUG / params: " + params.toString(), null, getGrant());
}*/
@Override
public String content(Parameters params) {
AppLog.warning("DEBUG / params: " + params.toString(), null, getGrant());
return super.content(params);
}
}
Merci pour ton analyse.
On va corriger ça, les paramètres sont perdus dans la conversion Permalink => Deeplink.
Le code utilise un request.getPathInfo() qui ne récupère que /demo-catalog.
Ce sera livré en 6.1.11 en lui ajoutant le request.getQueryString().
Je laisse @Francois répondre si c’est backportable en 6.0 mais j’attire l’attention sur le fait que la 6.0 est désormais en toute fin de maintenance (31/10/24) la 6.0 est une version mineure, il s’agit donc d’une maintenance court terme uniquement destinée à laisser un peu de temps pour upgrader en 6.1 (ce n’est pas une maintenance long terme comme pour la v5 avec la 5.3).
Il est donc largement temps de passer en 6.1, c’est en général indolore sauf si vous utilisez les choses indiquées ici: release note 6.1 / compatibility-breaking-changes pour lesquelles le refactoring est simple
Bonjour, merci pour la correction, en faisant des tests en 6.1.15 je n’ai plus le problème avec les paramètres manquants quand j’utilise le permalink et quand je suis déjà connecté à Simplicité.
Par contre si l’utilisateur n’est pas encore connecté à Simplicité et qu’il y accéde depuis un permalink, il arrive bien sur la page de connexion mais une fois authentifié les paramétres sont perdus.
J’ai testé avec l’authent interne, mais ça semble également présent avec oidc (j’ai pas pu mettre de log pour le moment pour confirmer que c’est le même problème)
Je viens de vérifier, c’est également présent avec OIDC.
Est-ce qu’une correction sera possible pour avoir le même comportament qu’avec le deeplink ?
C’est le cas d’usage avec OIDC qui nous intéresse le plus, l’authent interne Simplicité n’étant pas utilisée en prod.
Merci à @nathalie d’avoir relancé le ticket.
Effectivement les paramètres se perdent quand on passe par des redirect lors de l’authent.
Les infos du Permalink request.getQueryString() seront également préservées le temps de l’authent, le getPathInfo() n’était pas suffisant dans votre cas d’usage.
Je viens de tester en 6.1.19 avec l’authent OIDC.
Le comportement est différent par rapport à la 6.1.18 mais ce n’est pas celui souhaité, je ne sais pas si c’est quelque chose qui est mal configuré de mon côté.
Configuration
J’ai créé l’objet externe suivant avec un permalien “/obj-ext-params” :
package com.simplicite.extobjects.Demo;
import java.util.*;
import com.simplicite.util.*;
import com.simplicite.util.exceptions.*;
import com.simplicite.util.tools.*;
/**
* Basic external object DemoObjExtParams
*/
public class DemoObjExtParams extends com.simplicite.util.ExternalObject {
private static final long serialVersionUID = 1L;
// Note: instead of this basic external object, a specialized subclass should be used
/**
* Display method
* @param params Request parameters
*/
@Override
public Object display(Parameters params) {
try {
AppLog.warning("DEBUG / params: " + params.toString(), null, getGrant());
return javascript(getName() + ".render(ctn);");
}
catch (Exception e) {
AppLog.error(null, e, getGrant());
return e.getMessage();
}
}
}
Son code JS :
class DemoObjExtParams extends Simplicite.UI.ExternalObject {
async render(params, data = {}) {
$('#demoobjextparams').append(params);
}
}
Au niveau du paramètre système “AUTH_PROVIDERS” j’ai mis “false” au niveau du provider “internal” pour que la connexion se fasse automatiquement avec le SSO :
Si on regarde dans la console DevTools les échanges réseau on constate qu’après la connexion SSO on a été redirigé sur “/ui/?permalink=%2Fobj-ext-params%3Fparam1%3Dtest” :
J’arrive bien sur mon objet externe, par contre l’url de redirection n’est pas “/ui/?permalink=%2Fobj-ext-params%3Fparam1%3Dtest” mais “/ui/?deeplink=%2Fui%2Fext%2FDemoObjExtParams%3Fparam1%3Dtest”.
On est en cours d’amélioration au niveau du Auth Filter (niveau tomcat) pour d’autres sujets d’optimisation pour ne pas créer des sessions transitoires pour rien (pour véhiculer la requêtes et les paramètres notamment).
Mais ici, c’est visiblement un nouveau problème de tuyauterie suite au redirect de l’IDP.
Les paramètres sont bien conservés cette fois-ci mais le permalink est sensé être converti en deeplink, il doit encore manquer un petit quelque chose dans la chaine de traitement :
Effectivement le problème se reproduit quand on passe par une authent préalable, la conversion du permalink en deeplink (qui vérifie l’existence et les droits d’accès) ne se passe pas bien depuis qu’on ne perd plus les paramètres.
Si déjà authentifié :
la servlet permalink /ui/l utilise le getPathInfo (donc sans paramètre) pour retrouver le deeplink habilité, auquel Simplicité rajoute les paramètres (getQueryString)
Sinon, après redirect d’authentification
le paramètre deeplink de l’URL est bien complet avec les paramètres, mais il ne fallait pas en tenir compte pour retrouver le deeplink habilité