使用Java servlet实现自动登录退出功能
UserDao.java从数据库中查询用户名与密码
//登录 publicUserlogin(Useruser)throwsSQLException{ QueryRunnerqr=newQueryRunner(DataSourceUtils.getDataSource()); Stringsql="selectfromuserwhereusername=?andpassword=?"; returnqr.query(sql,newBeanHandler(User.class),user.getUsername(),user.getPassword()); } UserService.java publicUserlogin(Useruser){ try{ returnud.login(user); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnnull; }
UserServlet.java实现登录功能
//登录 publicvoidlogin(HttpServletRequestrequest, HttpServletResponseresponse)throwsIOException,IllegalAccessException,InvocationTargetException,ServletException{ Mapmap=request.getParameterMap(); Useruser=newUser(); BeanUtils.populate(user,map); if(map.get("autoLogin")!=null){ Cookieusername=newCookie("username",map.get("username")[0]); username.setMaxAge(6060); Cookiepassword=newCookie("password",map.get("password")[0]); password.setMaxAge(60*60); response.addCookie(username); response.addCookie(password); } user=us.login(user); if(user!=null){ request.getSession().setAttribute("user",user); response.sendRedirect("/ShopStore/default.jsp"); } else{ request.setAttribute("message","用户或密码错误!"); request.getRequestDispatcher("/login.jsp").forward(request,response); } }
工具类:AutoLoginFilter.java用来实现自动登录
packagecom.yinhe.web.filter; importjava.io.IOException; importjavax.servlet.Filter; importjavax.servlet.FilterChain; importjavax.servlet.FilterConfig; importjavax.servlet.ServletException; importjavax.servlet.ServletRequest; importjavax.servlet.ServletResponse; importjavax.servlet.http.Cookie; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importcom.yinhe.bean.User; importcom.yinhe.service.UserService; publicclassAutoLoginFilterimplementsFilter{br/>@Override publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse, FilterChainchain)throwsIOException,ServletException{ HttpServletRequestreq=(HttpServletRequest)request; HttpServletResponseresp=(HttpServletResponse)response; //是否已登录 if(req.getSession().getAttribute("user")==null){//如果已登录,则啥都不干 //判断cookie中有没有账户密码 Cookie[]cookies=req.getCookies(); if(cookies!=null){ Stringusername=""; Stringuserpass=""; for(Cookiecookie:cookies){ if(cookie.getName().equals("username")){//找到感兴趣的cookie username=cookie.getValue(); } if(cookie.getName().equals("password")){//找到感兴趣的cookie userpass=cookie.getValue(); } } UserServiceus=newUserService(); Useruser=newUser(); user.setUsername(username); user.setPassword(userpass); if(us.login(user)!=null){ req.getSession().setAttribute("user",user); } } } chain.doFilter(request,response);br/>} @Override publicvoidinit(FilterConfigfilterConfig)throwsServletException{ //TODOAuto-generatedmethodstubbr/>} @Override publicvoiddestroy(){ //TODOAuto-generatedmethodstub } }
前台:login.jsp此单选框被选中下次访问即为自动登录