实现自动登录:Filter 实现思路和方式
- 当你勾选(记住登录状态),用cookie保存用户名和密码。不勾选,cookie失效。
- 所有的页面都要经过autoLoginFilter.java 的过滤器,在这类中,必须要判断cookies不为null,获得所有的cookie,得到name为user的cookie,进行用户名和密码的验证,如果不为null,则将user存入session。
- 在LoginServlet.java中,获得username和password参数,进行dao验证,如果不为空,放入seesion中,进行页面跳转。
- 创建cookie对象。setpath("/"),表示本应用下的所有路径都能访问此cookie。
- 对于已经正确登录的用户,再次访问其他页面必定会再次经过autoLoginFilter,这时,判断当前session中的user是否为null,不为null,直接通过。
- 对于**login.jsp的有关页面,不需要经过autoLoginFilter。
package com.learning.web.servlet;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import com.learning.domain.User; import com.learning.service.UserService;@WebServlet("/servlet/loginServlet") public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");String autologin = request.getParameter("autologin");UserService userService=new UserService();User user = userService.findUser(username, password);//user不为null,则登录成功if (user!=null) {//创建cookie来保存用户信息Cookie cookie=new Cookie("user", user.getUsername()+"&"+user.getPassword());cookie.setPath("/");//autologin不为null,则记住了登录状态if (autologin!=null) {cookie.setMaxAge(1*60*60*24);//一天的有效时间 }else {cookie.setMaxAge(0);}response.addCookie(cookie);request.getSession().setAttribute("user", user);request.getRequestDispatcher("/home.jsp").forward(request, response);}else {response.sendRedirect(request.getContextPath()+"/homeLogin.jsp");}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
package com.learning.web.filter;import java.io.IOException;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.jsp.jstl.core.Config;import com.learning.domain.User; import com.learning.service.UserService;@WebFilter(urlPatterns="/*",initParams={@WebInitParam(name="autologin",value="login"),@WebInitParam(name="",value="")}) public class AutoFilter implements Filter{private FilterConfig filterConfig;@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 转换对象HttpServletRequest httpServletRequest = (HttpServletRequest) request;HttpServletResponse httpServletResponse = (HttpServletResponse) response;// 获得访问的路径String uri = httpServletRequest.getRequestURI();String contextPath = httpServletRequest.getContextPath();uri = uri.substring(contextPath.length() + 1);// 获得初始化参数String login = filterConfig.getInitParameter("autologin");System.out.println("直接通行的路径:"+login);// 不包含"login"的路径就要进行过滤 (xxxlogin.jsp 不需要自动登录)if (!uri.contains(login)) {HttpSession session = httpServletRequest.getSession();User u = (User) session.getAttribute("user");if (u != null) {System.out.println("session不为null");chain.doFilter(request, response);} else {// 处理业务逻辑// 1.获得cookie 得到User的信息 String username = "";String password = "";UserService userService = new UserService();Cookie[] cookies = httpServletRequest.getCookies();for (int i = 0;cookies!=null&& i < cookies.length; i++) { if ("user".equals(cookies[i].getName())) {String string = cookies[i].getValue();String[] values = string.split("&");username = values[0];password = values[1];User user = userService.findUser(username, password);// 不为空则放入sessionif (user != null) {System.out.println("自动登录了");httpServletRequest.getSession().setAttribute("user", user);}}}}}// 2.放行 chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.filterConfig=filterConfig;}}
转载于:https://www.cnblogs.com/youwillsee/p/6659364.html
实现自动登录:Filter 实现思路和方式相关推荐
- 2012自动登录服务器,配置Windows自动登录 - Windows Server | Microsoft Docs
打开自动登录Windows 09/08/2020 本文内容 本文介绍如何将Windows密码和其他相关信息存储在注册表数据库中,以自动执行登录过程. 通过使用此功能,其他用户可以启动计算机并使用您建立 ...
- 智能玩具 数据采集 首页展示 注册 登录 自动登录 二维码图片
玩具需求分析 1.语音实时通讯 - 让玩具成为孩子与父母之间沟通的桥梁 分支 建立幼儿社交圈2.积极正面幼教内容 - 让玩具能够播放 父母选定的儿歌,故事,百科,英语- 通过语音识别内容名称 玩具可以 ...
- 在 Windows 中启用自动登录功能
在 Windows 中启用自动登录功能 本文介绍了如何通过将密码和其他相关信息存储在注册表数据库中以配置 Windows 自动执行登录过程. 通过使用此功能,其他用户可以启动您的计算机并使用您建立的帐 ...
- java拦截到登陆界面,JavaWeb 使用Filter实现自动登录
JavaWeb 使用Filter实现自动登录 思路 使用cookie存储账号.密码,使用Filter拦截,从cookie中取出账号.密码.若用户要注销|登出.不再想使用自动登录,将cookie的有效期 ...
- 使用Filter过滤器自动登录功能
实现思路 1.首先判断是否勾选了自动登录按钮(LoginServlet文件中进行判断) 2.在LoginServlet 创建一个cookie 将用户的登录账号与密码保存到其中 ,存到客户端 3.返回到 ...
- 自动登录(过滤器filter的应用)
//反复实验的时候注意数据库数据的更新 //将数据存储到cookie里面 protected void doGet(HttpServletRequest request, HttpServletRes ...
- QQ空间及邮箱验证码登录的校验方式及自动登录的解决方案
目前有很多的SNS社区或类SNS的网站,例如开心.51.校内等,但是发现大多数社区在邀请好友的时候都没有提供对QQ邮箱或者QQ空间好友列表获取的功能,不过似乎海内支持,但是网上相关QQ的文章还不是很多 ...
- java+filter加密_Javaweb之Filter案例练习-自动登录问题和MD5加密
自动登录问题和MD5加密 前面已经完成了Filter的自动登录,但是有问题,我们在web.xml中Filter的url-mapping中配置的规则是/*, 也就是这个网站的所有请求都拦截.这肯定不合适 ...
- 使用Filter实现用户自动登录
自动登录原理 利用cookie保存用户登录信息,从cookie中获取用户名和密码,不需要用户自己再次输入 为什么用Filter 如果不用Filter,请求每个servlet时,都要有操作cookie的 ...
- 自动登录武汉理工大学鉴湖宿舍校园网的方式-苹果/ipad端
自动登录武汉理工大学鉴湖宿舍校园网的方式-苹果/ipad端 前言 技术手段 步骤 1.打开快捷指令 2.创建自动化操作 3.设定为接入宿舍网时 4.添加操作 问题 关于表单的获取 总结 前言 之前把电 ...
最新文章
- 阿里软件测试工程师手把手教学——自动化测试报告太丑,怎么办?
- Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
- python简单超级马里奥游戏下载_python 实现超级玛丽游戏
- CCPC秦皇岛gym102361A. Angle Beats
- [bzoj3625][Codeforces Round #250]小朋友和二叉树 (生成函数)
- event类型 php,深入解析PHP的Laravel框架中的event事件操作
- 矩阵特征值的物理意义
- everything搭配什么软件_重磅推荐一款神级工具软件!有了它,90%的软件都可以卸载了!...
- GD32F303调试小记(零)之工程创建与编译
- 一步一步实现iOS微信自动抢红包(非越狱)
- QQxml红包跳转群代码
- HAL库与标准库的理解
- R语言使用order函数对dataframe数据进行排序、基于单个字段(变量)进行降序排序(DESCENDING)
- 浅谈用户全生命周期管理
- java节假日算法_java处理节假日和工作时间的工具类
- 单片机:数字电压表TLC2543 C程序代码
- 学好MySQL增删查改,争取不做CURD程序员【上篇】
- 十个Mac端设计软件
- 【LINQ技术】扩展特性和LINQ操作符
- 论学生/战队/社团如何举办CTF比赛
热门文章
- 编程坑太多,Map 集合怎么也有这么多坑?一不小心又踩了好几个!
- golang 编译 执行时候报错cannot declare name db.Query
- Solr 4.10.3 schema.xml 域类型详解
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_2_TCP通信的概述(下)...
- 【转载】RESTful 架构风格概述
- 在线教育工具—白板系统的迭代1——bug监控排查
- php接口和多态的概念以及简单应用
- 809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。...
- POJ 3378 树状数组+DP+离散化+高精度
- ubuntu 开发环境的配置 (转)