2016-03-15 3 views
0

Je crée une application Struts2.sessionMap.invalidate() ne fonctionne pas en essayant de se déconnecter

Je suis en train de vous déconnecter, mais je reçois java.lang.nullpointerexception

Ma méthode est la suivante:

public String logout(){ 

    Map session = ActionContext.getContext().getSession(); 
    SessionMap sessionMap=(SessionMap)session; 
    log.info("session:"+session); 
    log.info("sessionmap:"+sessionMap); 
    log.info("sessionMap.get()"+sessionMap.get("USROBJECT")); 
    try{ 
    if(sessionMap!=null){ 

     sessionMap.remove("USROBJECT"); 
     sessionMap.invalidate(); 

    } 
    } 
    catch(Exception e){ 
     log.info("Exception is:"+e.toString()); 
    } 


    return "LOGOUT"; 
} 

Je reçois l'objet quand je suis en train d'imprimer session, SessionMap et "USROBJECT" objet, mais quand J'appelle remove, je reçois une exception. S'il vous plaît aider.

méthode de connexion:

public Map session = ActionContext.getContext().getSession(); 
    public SessionMap sessionMap; 
    public void setSession(Map session) { 
    sessionMap=(SessionMap) session; 
    } 

    public String login(){ 
     us = new UserSession(); 
     us= getUserDetails(); 
     log.info("userName is:"+us.getUserName()); 
     log.info("password is:"+us.getPassword()); 
     us.setLastLoginTime(loginTime); 

     sessionMap.put("USROBJECT", us); 
     return "register"; 
    } 

struts.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
<constant name="struts.devMode" value="true" /> 
<constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
<package name="Hello" extends="struts-default"> 

    <action name="*LoginAction" method="{1}" 
     class="com.pgnext.apps.action.LoginAction"> 




    <result name="register">/jsp/register.jsp</result> 
    <result name="error">/jsp/error.jsp</result> 
    <result name="logout">/jsp/login.jsp</result> 
    </action> 

    </package> 
</struts> 
17:09:31,038 INFO LoginAction:171 - going to remove USROBJECT 
    17:09:31,038 INFO LoginAction:183 - Exception is : java.lang.NullPointerException 

Répondre

0

Vous n'avez pas besoin d'invalider la session (une session est généralement créé lorsque vous atterrissez sur une JSP), enlevez simplement votre objet:

private final static String USER_KEY = "USROBJECT"; 

public String logout(){ 
    Map<String,Object> session = ActionContext.getContext().getSession(); 
    if (session.containsKey(USER_KEY)) { 
     session.remove(USER_KEY); 
    } 
    return "LOGOUT"; 
} 

Voir également

+0

j'avais ajouté le « USROBJECT » dans SessionMap, mais quand je suis en train de l'enlever, je reçois nulle exception de pointeur – Raina

+0

Retry avec le code ci-dessus.N'utilisez pas SessionMap et utilisez des constantes pour vous assurer que vous ne générez pas de fautes de frappe dans le nom de la clé. Essayez également de récupérer la session de la manière décrite dans la réponse liée. P.S: souvenez-vous que vous pouvez également voter maintenant, puisque vous avez 15 points de réputation. –

0

Je pense que le problème que vous avez avec l'invalidation de session que vous essayez de réutiliser l'objet de session après l'invalidation de la session. Je l'ai expliqué here.

Si vous souhaitez accéder à la session Struts après avoir invalidé la session de servlet, vous devez mettre à jour ou renouveler la session Struts.

Sur la page JSP, vous pouvez vérifier l'objet avec s:if tag

<s:if test="#session.USROBJECT != null"> 
    .... 
</s:if> 

Après infirmation de la session, vous devez retourner un résultat de type redirect ou redirectAction.

<result type="redirect" name="logout">/jsp/login.jsp</result> 

Le login.jsp ne devrait pas être un welcome-file figurant dans le web.xml.

Et dans login() action vous n'avez pas initialisé un sessionMap.

public String login(){ 
     Map session = ActionContext.getContext().getSession(); 
     SessionMap sessionMap=(SessionMap)session; 
 us = new UserSession(); //don't need it 
     UserSession us = getUserDetails(); 
     if (us != null) { 
     log.info("userName is:"+us.getUserName()); 
     log.info("password is:"+us.getPassword()); 
     us.setLastLoginTime(loginTime); 

     sessionMap.put("USROBJECT", us); 
     } 
     return "register"; 
    } 

+0

Bonjour, même après avoir ajouté votre code, je reçois la même exception. Je ne suis pas capable de comprendre quand je suis capable d'imprimer l'objet utilisateur, alors pourquoi est-ce que j'obtiens une exception de pointeur nul quand j'essaye de l'enlever? – Raina

+0

La pile d'exception est nécessaire pour diagnostiquer le code. Aussi, il serait bon si vous ajoutez 'struts.xml' à la question. –

+0

J'ajoute ma méthode de connexion, méthode de déconnexion, struts.xml et jsp..please referment. – Raina