• 首先我们不能用session,因为session在用户退出的时候,就已经失效了。
  • 这里可以考虑一下用cookie,放置在浏览器端,
 //那么我们就需要设置一个令牌   51867003-9a90-42ac-8d8a-9b5f74d8e13a------>518670039a9042ac8d8a9b5f74d8e13aString tookenId = UUID.randomUUID().toString().replace("-","");tookenId += "-" +System.currentTimeMillis();//在这里,还需要设置一个最大的失效时间//一般设置7天,但在这里,方便测试,设置为20sCookie cookie = new Cookie("tookenId",tookenId);//cookie.setMaxAge(60*60*24*7);cookie.setMaxAge(20);response.addCookie(cookie);//获取全局上下文,ServletContext//将令牌与uid进行一个关联ServletContext application  = request.getServletContext();application.setAttribute(tookenId,uid);
  • 写一个工具类,判断是否设置了自动登录

    /*** 这个类的作用是判断是否需要自动登录的*/private static UserDao userDao = new UserDaoImpl();public static boolean isAutoLogin(HttpServletRequest request, HttpServletResponse response){//这是从浏览器获得到的所有cookieCookie[]  cookies = request.getCookies();//获得cookie之后,循环,然后看那个cookie中包含tooken令牌for(Cookie cookie : cookies){if("tookenId".equals(cookie.getName())){//有tooken令牌之后,找到所对应的值String tookenId = cookie.getValue();long time = Long.parseLong(tookenId.split("-")[1]);//根据tokenId,找uname如果没有的话,tooken是伪造的,或者是服务器中的缓存已消失ServletContext application = request.getServletContext();String uname = (String)application.getAttribute(tookenId);if(uname == null){response.setHeader("auto-login-info","auto login fail,cache invalid");return false ;}/* 在这里,还要考虑一下时间的问题*/long currentTime = System.currentTimeMillis() ;long day =(currentTime-time)/(60*60*24);if(day >7){//过期,不能自动登录response.setHeader("auto-login-info","auto login fail,tokenId expire");return false ;}User user = userDao.findAUser(uname);//有的话,根据uname找到user,看user是否为空,为空的话,说明user已经从数据库中消失,设置一个响应头,告知浏览器这种情况//如果user不为空,说明有这个user,那么我们直接跳到我们想要的界面(这个交给具体的来做),这里只负责return true 或者falseif (user == null){response.setHeader("auto-login-info","auto login fail,user not exist");return false ;}else{//程序到这一步,说明是可以登录的addLoginUser(user, request.getSession());return true ;}}}response.setHeader("auto-login-info","auto login fail,tokenId invalid");return false ;}private static void addLoginUser(User user ,HttpSession session){session.setAttribute("loginUser",user);}
    
  • 由于现在我们登录有两种,一种是访问登录页面(login.jsp, login),这种情况我们首先判断有没有设置自动登录,即有没有cookie
  • @WebFilter("/login,/login.jsp")
    public class AutoLoginFilter extends HttpFilter {protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {//首先判断是否要自动登录if(LoginUitl.isAutoLogin(request,response)){chain.doFilter(request,response);return ;}//否则的话,去主页面request.getRequestDispatcher("/main.jsp").forward(request,response);}
    }

    另一种是直接去访问的其他页面,由于设置了过滤器,如果设置了自动登录的话,那么直接去到用户想要去的页面,否则,去登录页面

     //这个时候方向,首先判断是否设置了自动登录if(LoginUitl.isAutoLogin(request,response)){chain.doFilter(request,response);return;}request.getRequestDispatcher("/main.jsp").forward(request,response);
    

记住密码(用户免密登录)相关推荐

  1. flask框架如何实现修改密码和免密登录功能

    flask是python web开发的常用框架之一.本文将讲述flask如何实现修改密码和免密登录功能 修改密码功能 数据库部分: #重置密码 def reset_pass(phone,passwor ...

  2. linux xshell用户免密登录设置

    最重要准备工作 ​编辑linux xshell用户免密登录设置步骤 1.在xshel进行密钥获取操作 2.创建mkdir ~/.ssh目录(检查有没有这个目录,没有自己添加) 3.在该目录创建auth ...

  3. 8c创建gbase用户免密登录

    所有节点创建gbase用户免密登录: [gbase@localhost ~]$ mkdir ~/.ssh [gbase@localhost ~]$ chmod 700 ~/.ssh 在任意节点均可进行 ...

  4. GateOne配置API认证、SSH自动登录、用户免密登录及Web应用嵌入

    GateOne的安装与远程连接SSH在上一篇博客中已经有详细过程,传送门:全新CentOS7上GateOne的安装. 今天记录的是GateOne在Web应用中逐步添加API认证.取消掉用户登录需要输入 ...

  5. APP新用户注册、手机号绑定、用户登录验证新方式——一键登录(免密登录)验证方式新趋势

    传统的手机APP应用注册通常需要用户输入用户名,填写用户密码,同时通过获取验证码绑定手机号.用户一旦注册后再次登录传统的方式都是提供用户名加密码,或者凭手机验证码登录.当然现在许多APP为了获取更多的 ...

  6. ssh 免密登录 ssh互信 ssh登录到linux服务器不需要输入密码

    借鉴 https://blog.csdn.net/jeikerxiao/article/details/84105529 ## 生成公钥私钥 ssh-keygen ## 上传公钥 下面用什么用户 就是 ...

  7. Linux环境非root用户配置SSH免密登录(配置原理)

    问题产生背景: 有三台CentOS 7.5机器要部署hadoop分布式环境,机器信息如下 IP 地址 主机名 192.168.119.100 node01 192.168.119.110 node02 ...

  8. ssh设置免密登录后登录仍需密码可能的原因,以及 ssh 出问题或的调试方法

    免密登录失败 ssh设置免密登录后登录仍需密码可能的原因,home 路径下的对应用户权限不对,或者 .ssh 文件夹权限不对,/home/$user 和 /home/$user/.ssh 路径必须是 ...

  9. linux创建用户组及用户,并sudo免密登录

    linux创建用户组及用户,并sudo免密登录 1 前提使用超级用户(root)操作 2 创建用户组 3 创建用户 4 其他命令 5 sudo免密 5.1 切换root用户 5.2 修改文件 5.3 ...

最新文章

  1. 测试逐飞的MM32F3277 MicroPython开发板的基本功能
  2. 每日一皮:程序员新手尝试新框架的时候
  3. 时间序列里面最强特征之一
  4. Django从理论到实战(part3)--创建一个Django项目
  5. 工作112:vue路由跳转错误:Error: Redirected when going from “/login“ to “/home“ via a navigation guard.
  6. Qt图形界面编程入门(创建一个简单的程序)
  7. enc易能变频_ENC易能变频器故障灯亮快修收费合理
  8. FLEX Array和ArrayCollection的区别
  9. Flutter 一个电话样式小控件
  10. win10系统更新在哪_五步教你win10永久关闭系统自动更新
  11. 基于TCP协议的Socket通信,实现文件断点续传
  12. web基础_$POST 在线http接口测试网址
  13. python处理word文档中表格 添加一列_Python操作word文档插入图片和表格的实例演示...
  14. eclipse背景设置什么颜色缓解眼睛疲劳
  15. C#,欧拉数(Eulerian Number)的算法与源代码
  16. 为什么文本框里的字只显示一半_word字体显示不全及显示一半怎么回事?
  17. 【深度之眼cs231n第七期】笔记(二十七)
  18. 计算机无法设置壁纸黑屏,电脑界面为什么无法换壁纸 一直黑屏 但有图标
  19. UI设计教程分享:关于海报的合成过程
  20. P1247 取火柴游戏 (博弈论)

热门文章

  1. 移动办公APP开发需要具备哪些功能?
  2. 2021.1.9每日复习 75.颜色分类(复习快速排序)+ 77.组合(回溯算法)
  3. 启动mongo The file /Users/mostthe/.bash_profile does not exist.
  4. 【计算机网络原理之TCP】
  5. 冰冰学习笔记:二叉树的进阶OJ题与非递归遍历
  6. 2021江苏科技大学计算机考研,江苏科技大学2021考研分数线已公布
  7. 论文笔记:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
  8. jQuery-案例-五星评价
  9. Parallels Desktop 开机windows黑屏的解决
  10. iOS 检查手机的3D Touch是否可用