如何在spring mvc中使会话无效以实现注销

时间:2017-05-09 18:19:38

标签: java spring session model-view-controller annotations

我已使用

设置了会话属性
@SessionAttribute annotation.
@RequestMapping(value = "/login_action")
public ModelAndView login_action(@RequestParam("email") String email,@RequestParam("password") String password){
                Query q=session.createSQLQuery("SELECT User_ID,User_First_Name,User_Last_Name,Email,User_Type,Program,Level,Gender FROM Users  WHERE Email=:email AND Password=:password");
q.setParameter("email",email);
q.setParameter("password",password);
Object u = (Object) q.uniqueResult();
model=new ModelAndView("profile");
model.addObject("user",u);
return model;
}

现在我需要在注销时使此会话无效。 我试过像

    @RequestMapping(value = "/logout")
    public ModelAndView logout(HttpSession sess){
        sess.invalidate();
        model.addObject("view","home");
        return model;
    }

我可以通过一些例子得到一些答案。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

来自javadocs

  

注意:使用此注释指示的会话属性对应   到特定处理程序的模型属性,获得透明存储   在会话中。这些属性将被删除一次   handler表示其会话会话已完成。因此,   将此工具用于此类会话属性   应该在课程期间暂时存储在会话中   特定处理程序的对话。

     

对于永久会话属性,例如用户身份验证对象,   请改用传统的session.setAttribute方法。   或者,考虑使用的属性管理功能   通用的WebRequest接口。

使用SessionAttributes时,通常使用SessionStatus setComplete

我认为最好将Spring安全性与身份验证提供程序和UsernamePasswordAuthenticationToken一起使用。您的用户/主体可以通过SecurityContextHolder访问并包含在HttpSession中。使用spring security时,您可以使用/配置LogoutConfigurer使会话无效并清除SecurityContextHolder上下文并将身份验证设置为null。

附注:我希望除了demo / poc之外的任何其他内容,因为看起来您将密码存储为纯文本