Projets
Pages enfant
  • 3.20.1 Configuration en déploiement portlet

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Commentaire: Migrated to Confluence 5.3
Avertissement

TODO

...

Pour un déploiement portlet, la stratégie employée est la suivante : le portail (uPortal) passe à la portlet un PT, à partir duquel la portlet pourra récupérer le PGT convoité. Cela implique des modifications dans uPortal, légères.

Nous montrerons tout d'abord les modifications à effectuer dans uPortal pour qu'un PT soit passé aux portlets via une préférence JSR-168.

Nous montrerons enfin comment, dans esup-commons, on récupère un PT que l'on pourra ensuite passer à des services pour authentifier l'utilisateur connecté.

Sommaire :

Sommaire
maxLevel3

Passage du PT du portail vers une portlet

Nouvel adaptateur pour les portlets : CCasProxyPortletAdapter

Récupérer ou écrire la classe org.esupportail.portal.channels.portlet.CCasProxyPortletAdapter, qui hérite de CPortletAdapter en surchargeant sa méthode getUserInfo(). Cette méthode est appelée une fois à l'initialisation du canal pour remplir une table des paramètres passés à la portlet via le mécanisme de préférences de JSR-168. On y ajoute simplement ajoute un paramètre qui contient le PT.

Le nom du paramètre et l'URL pour lequel le PT est récupéré sont passés en paramètre à la publication de la portlet dans uPortal (cf ci-dessous). Ces deux paramètres sont :

  • casProxyTicketPref, optionnel, par défaut casProxyTicket.
  • casTargetService, obligatoire

Nouveau type de canal : CasProxyPortlet

On pourrait publier les portlets proxy CAS de type Custom en utilisant l'adaptateur ci-dessus, mais il semble plus indiqué de créer un nouveau type de canal dédié pour l'occasion. Pour cela, on crée donc un nouveau type de canal dans la base uPortal, de nom CasProxyPortlet, qui utilise la classe org.esupportail.portal.channels.CCasProxyPortletAdapter (au lieu de org.jasig.portal.channels.CPortletAdapter pour le type Portlet).

Dans une version ultérieure de uPortal-esup, on pourra ajouter les lignes suivantes à <uportal>/properties/db/esup-data.xml pour la table UP_CHAN_TYPE :

Bloc de code

<row>
  <column><name>TYPE_ID</name>
  <value>12</value></column>
  <column>
    <name>TYPE</name>
    <value>org.esupportail.portal.channels.portlet.CCasProxyPortletAdapter</value>
  </column>
  <column>
    <name>TYPE_NAME</name><value>CasProxyPortlet</value>
  </column>
  <column>
    <name>TYPE_DESCR</name>
    <value>Adapter for CAS proxy JSR-168 Portlets</value>
  </column>
  <column>
    <name>TYPE_DEF_URI</name>
    <value>/org/esupportail/portal/channels/portlet/CCasProxyPortletAdapter.cpd</value>
  </column>
</row>
Info

Récupérer CCasProxyPortletAdapter.cpd.

Publication de la portlet

Il faut publier la portlet en utilisant le nouvel adaptateur, on utilisera par exemple le fichier de configuration XML suivant :

Bloc de code

<channel-definition>
    ...
    <type>CasProxyPortlet</type>
    <class>org.esupportail.portal.channels.channels.portlet.CCasProxyPortletAdapter</class>
    ...
    <parameters>
      <parameter>
        <name>portletDefinitionId</name>
        <value>esup-blank.esup-blank</value>
        <ovrd>N</ovrd>
      </parameter>
      <parameter>
        <name>casProxyTicketPref</name>
        <value>casProxyTicket</value>
        <description>The name of the JSR-168 preference used to pass the proxy ticket</description>
        <ovrd>N</ovrd>
      </parameter>
      <parameter>
        <name>casTargetService</name>
        <value>http://portal.domain.edu/application</value>
        <description>The CAS service of the portlet</description>
        <ovrd>N</ovrd>
      </parameter>
    </parameters>
</channel-definition>

C'est tout ce qu'il faut faire au niveau de uPortal. Une fois ces modifications faites, la portlet dispose d'une préférence supplémentaire (casProxyTicket par défaut), qui contient un PT pour l'utilisateur courant.

Remarque

Le paramètre casTargetService indique à uPortal pour quel service récupérer le PT à passer. Il ne s'agit pas d'une URL réelle, mais cette même URL doit être précisée à l'initialisation du bean casService (propriété service, voir plus loin) qui sert à récupérer de nouveaux PTs pour les services accédés par l'application.

Remarque

L'adaptateur CCasProxyPortletAdapter peut également être utilisé pour publier des portlets qui n'ont pas besoin de ticket CAS ; il suffit dans ce cas de ne pas spécifier de paramètre casTargetService à la publication de la portlet.

Récupération du PT transmis par le portail à la portlet

Le PT transmis par le portail est récupéré par le bean casService, défini par exemple dans le fichier de configuration Spring /properties/auth/auth.xml :

Bloc de code

<bean
    id="casService"
    class="org.esupportail.commons.services.cas.PortletCasServiceImpl" >
    <property
      name="service"
      value="http://portal.domain.edu/application" />
    <property
      name="casValidateUrl"
      value="https://cas.domain.edu/proxyValidate" />
    <property
      name="proxyCallbackUrl"
      value="https://portal.domain.edu/application/casProxyCallback" />
</bean>

Les propriétés service, casValidateUrl et proxyCallbackUrl du bean casService ont les significations suivantes :

...

Remarque
titleConfiguration de la callback du PGT

Pour que le PGT soit récupéré par l'application, il faut que l'application soit à l'écoute sur une URL de callback, celle donnée à la propriété proxyCallbackUrl du bean casService. Pour cela, il faut configurer une servlet supplémentaire dans le contexte Tomcat de l'application, dans le fichier /properties/WEB-INF/web.xml :

Bloc de code

<servlet>
    <servlet-name>CasProxyCallback</servlet-name>
    <servlet-class>edu.yale.its.tp.cas.proxy.ProxyTicketReceptor</servlet-class>
    <init-param>
      <param-name>edu.yale.its.tp.cas.proxyUrl</param-name>
      <param-value>https://cas.domain.edu/proxy</param-value>
    </init-param>
    <load-on-startup>4</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>CasProxyCallback</servlet-name>
    <url-pattern>/casProxyCallback</url-pattern>
</servlet-mapping>

...