由于对用户数据的安全性考虑,在同一时刻不允许两个相同的用户存在(SSM架构下)。
场景,假设 Tom使用了用户1,Joker也是使用了用户1,两人同时对用户1 的相关数据进行了修改,就会造成数据的安全隐患。
思路:
1.定义一个key-value结构的用户栈,将用户名与sessionId绑定,存入用户栈中
2.设置拦截器,拦截请求,判断该用户的sessionId是否与系统中的sessionId一致
这里的用户栈可以使用ServletContext,其作用域为application,在用户登录成功的时候,将sessionId存入ServletContext,并在拦截过程中,以用户名为Key值判断sessionId的一致性。
实现:
在controller的登录方法dologin中:
@RequestMapping(value="/dologin",method = RequestMethod.POST)publicString dologin(@RequestParam User user,HttpSession session, Model model){//获取ServletContext对象
ServletContext application= session.getServletContext();//查找数据库中的用户信息
User loginUser=userService.login(user);if(loginUser!=null){ //账号密码正确String sessionId= session.getId();
if(application.getAttribute(