2010-11-15 38 views
2

J'utilise le plugin Grails Spring Security Core pour sécuriser une certaine action en utilisant l'annotation suivante.Grails Spring Security Core Plugin - ajout d'un message flash à la page de connexion

@Secured(['IS_AUTHENTICATED_REMEMBERED']) 

Cela provoque l'action rediriger vers ma page de connexion si l'utilisateur n'est pas connecté. Une fois qu'ils sont connectés, ils sont ensuite redirigés vers l'action initiale.

Comment puis-je ajouter un message flash à la page de connexion dans ce scénario, à savoir

flash.message = "You must be logged in to submit a news story" 

Pour clarifier, je ne veux que le message soit affiché si l'utilisateur a été redirigé vers la page de connexion après avoir essayé pour accéder à cette action spécifique. D'autres actions ne déclencheraient pas le message.

Répondre

3

J'ai résolu ceci comme suit.

  1. Déroute l'annotation de l'action.
  2. Ajoutez le code suivant au début de l'action (news et submit étant respectivement le contrôleur et l'action concernés).

    if (!springSecurityService.isLoggedIn()) { 
        flash.message = "You must be logged in to submit a news story." 
        redirect(controller:"login", action: "auth", params:["spring-security-redirect" : "/news/submit"]) 
    } 
    
  3. Ajoutez ce qui suit au formulaire de connexion.

    <input type='hidden' name='spring-security-redirect' value='${params['spring-security-redirect']}'/> 
    
+0

Bonne solution de contournement. Ce serait bien de pouvoir le faire dans l'annotation, cela semble être un cas d'utilisation très courant – Peter

2

Ajouter, par exemple, ceci à votre vue login:

<sec:noAccess url="/admin/listUsers"> 
    You must be logged in to view the list of users. 
</sec:noAccess> 

Voir la security taglib's documentation.

+0

Merci. Cependant, cela ne fonctionnera pas tout à fait car j'ai besoin que je voudrais seulement que le message soit affiché si l'utilisateur avait essayé d'accéder à l'action spécifique. J'ai reformulé ma question pour clarifier cela car je peux voir que ce n'était pas clair. – William