上一次讲了使用Javamail发送邮件,目的就是为了在项目中实现忘记密码的功能,这一次又碰到新的问题就是如何实现自动登录的功能,主要思想其实很简单,就是在将用户名和密码保存到cookie中,然后在显示首页的控制器中获取cookie中的账号,最后保存到session中,就和正常的登录效果是一样的了。
1.第一步,在登录的页面添加一个自动登录的选项:
<label> <input name="auto" type="checkbox" value="true"/>自动登录
2.第二步,在验证登录的控制器中加上选择自动登录的变量,如果该变量不为空,则将用户名和密码保存到session中:
//登录功能
@RequestMapping(value = "/login")
public ModelAndView check(@ModelAttribute("user") User user,@Param("auto") String auto,HttpSession session,HttpServletRequest request,HttpServletResponse response) {
ModelAndView maviView = new ModelAndView("findall");
//通过用户和密码找到user对象
User user1 = loginRegServices.findUserByName(user, session, request);
if (user1 != null) {
//如果auto的值不为空,即选择了自动登录
if (auto!=null) {
//设置自动登录的时间为一个星期
int seconds=7*24*60*60;
//保存在Cookie中
Cookie cookie=new Cookie("user", user.getUsername()+"=="+user.getPassword());
cookie.setMaxAge(seconds);
response.addCookie(cookie);
}
session.setAttribute("user", user1);
return maviView;
} else {
maviView.addObject("err", "账户或密码错误");
maviView.setViewName("login.jsp");
return maviView;
}
}
3.第三步,在显示首页的控制器中获取cookie中的值,构造一个user对象,然后根据该对象找到数据库中用户的完整信息,保存到session
//首页的显示
@RequestMapping(value="/findall")
public ModelAndView blog_findall(HttpServletRequest request,HttpSession session)
{
Cookie cookie[]=request.getCookies();
String[] cooks=null;
if (cookie!=null) {
for(int i=0;i<cookie.length;i++){
Cookie c=cookie[i];
String userc=c.getValue();
cooks = userc.split("==");
if (cooks.length==2) {
String username=cooks[0];
String password=cooks[1];
User user=new User();
user.setUsername(username);
user.setPassword(password);
//通过此只用用户名和密码的user找到完整的user对象的信息,并保存在session
loginRegServices.autoLogin(user, session, request);
}
}
}
ModelAndView mav=new ModelAndView("index.jsp");
mav.addObject("book",bookService.findall());
mav.addObject("bookone",bookService.findallone());
mav.addObject("booktwo",bookService.findalltwo());
mav.addObject("bookthree",bookService.findallthree());
mav.addObject("bookhotcomment",bookService.findhotcomment());
mav.addObject("findpublish",bookService.show_publish());
mav.addObject("zhuantione", bookService.showzhuantione());
mav.addObject("publishList", bookService.findAllPublish());
//mav.addObject("zhuantione", bookService.showzhuantitwo());
return mav;
}
4.保存到session的方法如下:
//自动登录
public void autoLogin(@ModelAttribute("user") User user,HttpSession session,HttpServletRequest request){
User user1 =userMapper.selectByUsername(user.getUsername());
if(user1 !=null && user1.getPassword().equals(user.getPassword())){
session.setAttribute("user", user1);
}
}
是不是非常的简单呢,哈哈哈