2016-11-02 2 views
3

Nous avons une exigence dans laquelle je dois forcer l'utilisateur de déconnexion si certaines conditions sont remplies. J'ai écrit un crochet PostLoginAction pour vérifier la condition et faire getSession().invalidate() lorsque la condition est remplie. Mais après cela, puisqu'il n'y a pas de session active, Liferay m'emmène à l'écran de connexion par défaut (prolly en utilisant un filtre). Si j'essaie de rediriger vers l'une des pages d'erreur à l'intérieur de /ROOT/html/common/, je reçois une erreur serveur interne cryptique page.Afficher la page d'erreur personnalisée après forcer la déconnexion dans Liferay

À ce stade, j'ai besoin d'afficher un message d'erreur, mais toutes les redirections se retrouvent sur la page de connexion. Quelle devrait être la bonne façon de faire cela? Juste sur une note, est-il un moyen d'afficher le message d'erreur sur la page de connexion lui-même au lieu de rediriger vers une autre page? J'ai essayé d'employer la méthode sessionErrors.add() pour réaliser la même chose, mais cela aussi n'a pas fonctionné. Faites-moi savoir si vous avez besoin de plus de détails.

+1

Est-ce que je bien - vous voulez déconnecter l'utilisateur _immediately_ après que l'utilisateur a été connecté? Pourriez-vous ajouter votre «PostLoginAction» actuel pour mieux expliquer le problème? –

+1

Avez-vous essayé d'utiliser la création d'un hook "login.events.pre" dans liferay et d'invalider une session utilisateur dans la classe d'action? –

+0

@TobiasLiefke - mon code est presque similaire à ce qui est donné dans la réponse ci-dessous. – buch11

Répondre

1

S'il vous plaît suivez les étapes ci-dessous pour atteindre cet

  1. Créer un plugin crochet événement de connexion post
  2. Créer portal.properties avec des accessoires donnés

    login.events.post = com. liferay.sample.hook.LoginActionRedirect

  3. Créer une entrée dans l iferay-hook.xml

    portal.properties

  4. Créer une classe LoginActionRedirect

    package com.liferay.sample.hook; 
    
    import java.io.IOException; 
    
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    
    import com.liferay.portal.kernel.events.Action; 
    import com.liferay.portal.kernel.events.ActionException; 
    
    public class LoginActionRedirect extends Action { 
    
    @Override 
    public void run(HttpServletRequest req, HttpServletResponse res) 
         throws ActionException { 
        System.out.println("Invalidating user"); 
        req.getSession().invalidate(); 
        try { 
         //Use page URL to be redirected 
         res.sendRedirect(req.getContextPath()+"/web/guest/WCM"); 
        } catch (IOException e) { 
    
         System.out.println("Something went wrong while performing IO operations"); 
        } 
    } 
    

    }

  5. Ajoutez la propriété suivante au fichier portal-ext.properties, pour éviter la redirection avec locale préfixé

    locale.prepend.friendly.url.s tyle = 0

+0

C'est exactement ce que je suis en train de faire, ma question est de savoir si mettre un HTML personnalisé sous "/ web/guest/WCM" et faire un sendReirect il y a une façon valide de gérer la situation ou non? – buch11

+0

Je suis en train de faire response.sendRedirect ("/ html/common/loginBreaker.html "); Et j'ai placé ce html sous webapps/ROOT/html/common/dossier de l'installation liferay – buch11

+0

@ buch11 L'utilisation d'un contenu Web sur une page personnalisée sur le portail est une meilleure approche pour les raisons suivantes: 1) Pas besoin de redémarrer le serveur en cas de changement de contenu ou de page 2) Les modifications peuvent être facilement déployées ou retirées du serveur, directement à l'aide d'un crochet. Veuillez me le signaler si vous avez d'autres questions. –