2013-06-20 15 views
8

Sto usando @SessionAttributes in primavera, ma non so come terminare la sessione, ho provato il codice seguente ma sto ricevendo un errore, per favore mi dia un esempio.Come terminare la sessione nella primavera 3

Grazie.

@RequestMapping(value ="/LogoutAction") 
public String logout(HttpServletRequest request)  
{  
System.out.println("inside controller");  
    Resource res = new ClassPathResource("spring-context.xml"); 
    BeanFactory factory = new XmlBeanFactory(res); 
    HttpSession session = request.getSession(); 
    session.invalidate(); 
return "Login"; 
} 
+0

Che tipo di errore si ottiene? Si prega di inviare uno stacktrace – Jk1

risposta

18

Credo che il problema comune quando si usa @SessionAttributes è dopo aver nulla la sessione corrente, Spring MVC allegare il modello attribuisce di nuovo nel nuova sessione - causando quindi l'impressione che non invalida

È possibile verificare il valore di JSESSIONID prima di & dopo averlo invalidato. Si otterrà un nuovo JSESSIONID, eppure precedenti attributi modello sono attaccati direttamente nella nuova sessione

mi sono trovato a dover fare questo per cancellare un attributo di modello di nome "contatore" dalla sessione dopo invalidarla

@RequestMapping(value="/invalidate", method=RequestMethod.POST) 
public String invalidate(HttpSession session, Model model) { 
    session.invalidate(); 
    if(model.containsAttribute("counter")) model.asMap().remove("counter"); 
    return "redirect:/counter"; 
} 

Se avete gli attributi di abbondanza, naturalmente si può provare a pulire tutto fuori usando

model.asMap().clear(); 

Ma a mio parere migliore approccio è quello di invalidare utilizzando un controller diverso che non ha @SessionAttribute su di esso. Quindi qualunque modello attribuisca gli altri controller non sarà collegato direttamente alla nuova sessione. Es .:

@Controller 
@RequestMapping("/logout") 
public class LogoutController { 

    @RequestMapping(method=RequestMethod.POST) 
    public String logout(HttpSession session) { 
    session.invalidate(); 
    return "redirect:/login"; 
    } 
} 
+0

grazie gerrytan. – kavi

+0

Grazie una risposta preziosa –

Problemi correlati