1.前端页面准备


1.添加一个类型为checkbox的input选择框

<div class="checkbox"><label> <input type="checkbox" name="autoLogin" value="1"> 自动登录</label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <label> <input type="checkbox"> 记住用户名</label>
</div>

2.在负责用户登陆的servlet中创建一个cookie对象

/** 获取页面自动登陆选项框的值*/
String autoLogin = request.getParameter("autoLogin");
/**如果用户点击了自动登陆*/
if ("1".equals(autoLogin)) {/**1.创建一个Cookie用于记住用户的登录名和密码*/Cookie autoLoginCookie = new Cookie("autoLoginCookie", username + "@" + password);/**2.设置Cookie的路径为当前路径(即用户登陆)*/autoLoginCookie.setPath(request.getContextPath());/**3.设置Cookie的生命周期为一周*/autoLoginCookie.setMaxAge(60 * 60 * 24 * 7);/**4.将Cookie发送到浏览器*/response.addCookie(autoLoginCookie);
} else {/**如果用户没有点击自动登陆*/Cookie autoLoginCookie = new Cookie("autoLonginCookie", "");autoLoginCookie.setPath(request.getContextPath());autoLoginCookie.setMaxAge(0);response.addCookie(autoLoginCookie);
}

3.配置拦截器

web.xml文件中添加配置:

<filter><filter-name>loginFilter</filter-name><filter-class>com.itheima.web.filter.LoginFilter</filter-class>
</filter>
<filter-mapping><filter-name>loginFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

4.完善拦截器对象

1.如果已经登陆,不进行自动登陆
2.如果浏览器没有自动登录cookie信息,不进行自动登陆
3.如果浏览器记录cookie有误,不进行自动登录
4.用户没有登陆,浏览器记录正确的cookie,将自动完成登陆(session记录状态)

@WebFilter(filterName = "LoginFilter" ,urlPatterns = "/*")
public class LoginFilter implements Filter{/**实现拦截方法doFilter执行拦截*/public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {chain.doFilter(req, resp);/**1.对request,response进行强制转换*/HttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) resp;/**2.获取session,自动登陆成功后将登陆成功的用户信息存入session中*/HttpSession session = request.getSession();/**3.如果已经登陆,则放行*/User loginUser = (User)request.getSession().getAttribute("loginUser");if (loginUser != null){chain.doFilter(request,response);return;}/**4.获得自动登陆的cookie信息*/Cookie userCookie = CookieUtils.findCookie(request.getCookies(),"autoLoginCookie");/*CookieUtils:public static Cookie findCookie(Cookie[] allCookie ,String cookieName){if (cookieName == null){return null;}if (allCookie != null){for (Cookie c : allCookie){if (cookieName.equals(c.getName())){return c;}}}return null;}*//**5.判断自动登陆的cookie是否存在,如果不错在,则不需要自动登陆*/if(userCookie == null){chain.doFilter(request,response);return;}/**6.自动登陆的cookie是否存在,执行自动登陆*/if (userCookie != null){/**6.1获得用户信息*/String[] u = userCookie.getValue().split("@");String username = u[0];String password = u[1];/**6.2执行登陆*/loginUser = LoginUtils.login(username,password);/*public static User login(String username,String password){UserService userService = new UserServiceImpl();User user = null;try {user = userService.findByUsername(username);} catch (SQLException e) {e.printStackTrace();}if (password.equals(user.getPassword()) && user.getState()==1){return user;}else{return null;}}*//**6.3若没有返回值说明自动登陆没有成功*/if (loginUser == null){chain.doFilter(request,response);return;}/**6.4有返回值说明自动登陆成功,将返回的user对象存入session中*/session.setAttribute("loginUser",loginUser);}chain.doFilter(request,response);}/**实现filter的生命周期方法*/@Overridepublic void init(FilterConfig config) throws ServletException {}@Overridepublic void destroy() {}}

JavaEE学习14(应用)--用户自动登陆相关推荐

  1. 西门子HMI精智面板实现用户自动登陆

    西门子HMI精智面板实现用户自动登录 场景模拟 功能需求 实现流程 测试效果 案例程序 场景模拟 在实际生产环境中,为了保证账户密码的保密性和工作的方便,需要定时或者以按钮形式自动登录账号密码. 功能 ...

  2. 14.cookie与自动登陆

    场景 webdriver可以读取并添加cookie.有时候我们需要验证浏览器中是否存在某个cookie,因为基于真实的cookie的测试是无法通过白盒和集成测试完成的. 另外更加常见的一个场景是自动登 ...

  3. Win7多用户情况下,指定某一用户为自动登陆-解决办法

    转自:http://sbiuggypm.themex.net/archives/605 许久没更新博客了,但从后台可以查看到,有不少朋友还是几乎每天来逛一逛,很对不起的是最近都没更新啥内容.真是不好意 ...

  4. javaee学习之路(十五)JSP编程总结

    1.1 Tip:如何查找JSP页面中的错误   JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息.   ...

  5. cookie实现自动登陆原理

    现在很多网站都有为用户保存登陆信息(即保存Cookie)的功能,当用户下一次进入网站时,可以帮助用户自动登陆,使网站显得更加友好. 笔者通过研究ACEGI项目的自动登陆源码,编写了一个安全有效的实现两 ...

  6. JavaEE学习之jsp编写登陆注册页面

    JavaEE学习之jsp编写登陆注册页面 刚开始学习javaee,好多东西需要一点点积累.最近用jsp和简单的JavaScript写的登录注册界面,简单做一下记录. 准备–页面布局 登录和注册界面的H ...

  7. java 域用户登陆_AD域账户自动登陆(仅限IE浏览器)Java简单实现

    实现流程:同步域账户用户名至项目数据库->若是IE浏览器则通过ActiveXObject获取PC用户名->根据用户名查询数据库->存在则自动登陆 步骤1:通过定时任务同步AD域账户用 ...

  8. Linux学习总结(46)——Centos7.4设置开机自动登陆及网卡自动启用

    1.进入命令行模式,输入 nano /etc/gdm/custom.conf ,在[daemon]下添加2条命令,分别是 AutomaticLoginEnable=true AutomaticLogi ...

  9. Linux+javaEE学习笔记之Linux网络环境配置

    Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...

  10. 《计算机网络》课程学习(14)——计算机网络与通信实验指导书

    计算机网络与通信实验指导书 主编:田* ****大学********学院 2015年5月 目   录 实验-  常用网络命令(12周第一次实验) 实验二  交换机的基本配置(12周第二次实验,实验报告 ...

最新文章

  1. python json数据格式数组内元素递增赋值_python深浅复制,类型转换, json操作,数组操作...
  2. 华为配置(S3100)
  3. ConEmu状态栏的设置介绍
  4. 面试一口气说出Spring的声明式事务@Transactional注解的6种失效场景
  5. 将可见的电子签名添加到PDF
  6. nginx html解析插件,nginx配置信息的解析流程
  7. ucos ii 源代码中文注释详解: OS_CPU.c
  8. 【贪心】LeetCode 55. Jump Game
  9. Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)
  10. 人工神经网络优化算法,进化算法优化神经网络
  11. 怎样才能让自己的QQ号永远不会被盗?
  12. 【三】Apache的管理及优化
  13. Arduino Uno 实验11——MQ-3酒精乙醇传感器模块
  14. ORA-1628: max # extents 32765 reached for rollback segment 错误处理
  15. 打开keil提示未安装xx器件包,实际上已经安装
  16. 应用安全系列之二十三:SSRF
  17. 【 C++11 】列表初始化、声明、范围for、STL中一些变化
  18. 梁宁——用户体验地图和用户故事(阅读总结)
  19. 《计算机应用基础》第四次作业,[业务]计算机应用基础四次小作业
  20. 写了个Android聊天客户端框架,基本聊天功能、数据库、服务器都有。大家可以看一看。已经开源

热门文章

  1. rabbitmq接收不到消息_springboot集成RabbitMQ接收消息及其高级特性
  2. Cesium:鼠标移动事件判断是否在地球上操作以及获取经纬度
  3. commons-beanutils实现java深度克隆
  4. gitignore文件的几种写法,Git忽略文件规则的配置方法
  5. Dedecms修改TAG、title、keywords及栏目名称长度限制
  6. My97DatePicker时间控件和编辑器的调用
  7. 一天不学习我浑sen难受(一)—一致性哈希/Hash环学习笔记
  8. CVPR 2022数据集汇总|包含目标检测、多模态等方向
  9. CVPR 2020放榜,录取率降至22%,港中文周博磊发文感慨十年变迁
  10. 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1-2-3-3-4-4-5 处理后为 1-2-5(非常简单明了)