我已使用
设置了会话属性@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;
}
我可以通过一些例子得到一些答案。
感谢您的帮助
答案 0 :(得分:1)
来自javadocs
注意:使用此注释指示的会话属性对应 到特定处理程序的模型属性,获得透明存储 在会话中。这些属性将被删除一次 handler表示其会话会话已完成。因此, 将此工具用于此类会话属性 应该在课程期间暂时存储在会话中 特定处理程序的对话。
对于永久会话属性,例如用户身份验证对象, 请改用传统的session.setAttribute方法。 或者,考虑使用的属性管理功能 通用的WebRequest接口。
使用SessionAttributes时,通常使用SessionStatus setComplete
我认为最好将Spring安全性与身份验证提供程序和UsernamePasswordAuthenticationToken一起使用。您的用户/主体可以通过SecurityContextHolder访问并包含在HttpSession中。使用spring security时,您可以使用/配置LogoutConfigurer使会话无效并清除SecurityContextHolder上下文并将身份验证设置为null。
附注:我希望除了demo / poc之外的任何其他内容,因为看起来您将密码存储为纯文本