2010-09-10 9 views
3

J'ai un authen intercepteur qui vérifie si l'utilisateur est connecté. Si ce n'est pas qu'il redirigera vers la page de connexion, avec une chaîne de requête param "url" indiquant l'URL du référent. J'ai essayé d'utiliser "actionInvocation.getInvocationContext(). GetParameters()" pour passer des valeurs à l'URL de redirection, mais n'ont pas de chance.Comment passer des données d'Interceptor à l'URL et à JSP?

Quelqu'un peut-il suggérer ce que j'ai fait de mal? Merci beaucoup.

Code Interceptor:

public String intercept(ActionInvocation actionInvocation) throws Exception { 
    Map session = actionInvocation.getInvocationContext().getSession(); 
    Map params = actionInvocation.getInvocationContext().getParameters(); 

    String user = (String) session.get(Constants.KEY_USER); 

    boolean isAuthenticated = (null!=user); 

    if (!isAuthenticated) { 
     params.put("backUrl", "http://www.some_url.com/"); 
     return Action.LOGIN;    
    } 
    else { 
     return actionInvocation.invoke(); 
    } 
} 

pièces struts.xml

<global-results> 
    <result name="login" type="redirect">/login?url=${backUrl}</result> 

Répondre

0

Vérifiez l'ordre des intercepteurs dans votre fichier struts.xml; Interceptor params doit être placé avant intercepteur de connexion:

<interceptor-stack name="defaultLoginStack"> 
     ... 
     <interceptor-ref name="params" /> 
     <interceptor-ref name="login" /> 
     ... 
</interceptor-stack> 

Voici un example

Une autre façon d'obtenir la chaîne de requête, est de l'attribut javax.servlet.forward.query_string:

String queryString = (String) actionInvocation.getRequest(). 
     getAttribute("javax.servlet.forward.query_string");