网站自动登录功能留着一直没做,倒不是什么技术问题,可能以前觉得没多大用,但是最近突然觉的太有必要了,这样对用户是十分友好的设计,所以今天就利用Springmvc拦截器+cookie实现了网站自动登录的功能

需求分析:用户登录一次后,在未来的一段时间是不用再进行登录操作的,除非用户点击退出登录。

开发过程:

一、配置springmvc拦截器:在springmvc.xml中找到拦截器配置,添加一个新的拦截器

这里有三个拦截器,他们都是顺序执行的,不太明白原理的可以百度一下。

二、首次登录时操作cookie//登录成功设置cookie

Cookie userCookie=new Cookie("username",username);
userCookie.setMaxAge(4*7*24*60*60);
//设置cookie存取路径
userCookie.setPath("/");
//将Cookie加到response中
response.addCookie(userCookie);

这里我只存了username,因为username是我数据库的唯一标识,然后cookie是不安全的,所以不要在cookie里存放过多的信息。

三、拦截器操作:因为用户进入网站不一定会进入那个页面,所以我们在拦截器里操作是最恰当的,因为所有的请求都需要经过拦截器里的prehandle方法里,所以我们这样写@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object arg2) throws Exception {
//判断session中是否有信息
HttpSession session=request.getSession();
String username=(String) session.getAttribute("username");
if(username!=null){
//有就通过
return true;
}else{
//没有session就获取cookie进行判断
Cookie[] cookies=request.getCookies();
if(cookies!=null){
//有cookie就通过cookie获取用户信息
//遍历cookies
for(Cookie cookie : cookies){
if(cookie.getName().equals("username")){
String userCookie=cookie.getValue();
//当cookie中有username才执行
//获取用户数据
UserCustom user=new UserCustom();
user.setUsername(userCookie);
user=userService.findUserInfByUsername(user);
//登录成功设置session
session.setAttribute("userInf", user);
return true;
}
}
}
}
return true;
}

原理:先判断session中是否已经有用户信息,也就是用户已经登录,这样我们就不用再取cookie了,如果session里没有值,我们进行下一步判断浏览器中是否存在本网站的cookie,如果不为空我们就看看在所有cookie是否有我们存的username,如果有就连接数据库查找用户信息后存到session中,如果没有就正常通过就OK了

四、用户退出:用户自主选择退出后,我们需要删除存在浏览器里的cookie,以防下次自动登录//销毁cookie

Cookie userCookie=new Cookie("username",null);
userCookie.setMaxAge(0);
//设置cookie存取路径
userCookie.setPath("/");
response.addCookie(userCookie);
//销毁session
request.getSession().invalidate();

这样就实现了网站自动登录的功能,有不懂得在下方评论