2016-04-11 2 views
1

J'essaie d'intégrer l'authentification CAS dans nos services Web et d'utiliser le Jasig CAS server (version 4.2), qui est une application Web basée sur le printemps.Jasig CAS - comment personnaliser WebFlow pour rediriger l'utilisateur après une connexion réussie?

Malheureusement, le serveur Jasig CAS peut uniquement utiliser l'ID de service pour la redirection après une connexion réussie. Il est inacceptable, car le serveur CAS est situé derrière le proxy inverse et nous n'utilisons pas DNS. Ainsi, l'URL de connexion ressemble:

http://a.b.c.d/cas/login?service=http://x.x.x.x/context-path/auth-entry-point

  • ABCD - Adresse IP externe (proxy)
  • xxxx - interne (client de service/CAS) Adresse IP

J'ai lu des documentations Jasig, mais je n'ai trouvé aucun moyen de dissimuler l'URL du service. Pour l'instant j'essaie d'implémenter la logique personnalisée. Je veux passer url de redirection comme param séparé:

http://a.b.c.d/login?service=<serviceUID_like_YYY-YYY-YYY>&redirect=<base64_encoded_URL>

.. et utilise cette redirection au lieu de param d'ID de service.

Selon le document Jasig CAS utilise Spring Webflow pour implémenter le scénario de connexion (login-webflow.xml). Et c'est le lieu où la redirection a provoqué:

<end-state id="redirectView" view="externalRedirect:#{requestScope.response.url}"/>

Depuis que je ne suis pas familier avec le printemps Weblow la question est:

Comment puis-je recevoir « rediriger » param URL, décoder et l'utiliser pour la redirection?

P.S. Désolé pour mon mauvais anglais, j'espère que c'est au moins parseable :-)

Répondre

1

Ok, c'était assez simple. Pour tous ceux qui intéressent:

Créer haricot service personnalisé sous org.jasig.cas * package:.

package org.jasig.cas.usercustom; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Component; 
import org.springframework.util.Base64Utils; 

@Component("userCustomRedirectHelper") 
public class RedirectHelper { 

    final static Logger logger = LoggerFactory.getLogger(RedirectHelper.class); 

    public String decodeURLFromString(String src) { 
     String url = new String(Base64Utils.decodeFromString(src)); 
     logger.debug("Redirect URL: " + src); 
     return url; 
    } 
} 

Modifier login-webflow.xml comme suit:

<on-start> 
    <!-- get redirect param, decode and place into flowScope --> 
    <evaluate expression="userCustomRedirectHelper.decodeURLFromString(requestParameters.redirect)" result="flowScope.customRedirectURL" /> 
</on-start> 

<!-- redirect --> 
<end-state id="redirectView" view="externalRedirect:#{flowScope.customRedirectURL}"/>