通常我们登录某网站,会有选择保存几天,或者是几个星期不用登录,之后输入该网站地址无需登录直接进入主页面,那么这就叫做自动登录,怎么实现呢,下面我以一个小例子来演示一下

登录页面:login.jsp

Html代码  
  1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4. </head>
  5. <body>
  6. <form action="login.do">
  7. 用户名:<input type="text" name="username" ><br/>
  8. 密    码:<input type="text" name="password" ><br/>
  9. <input type="submit" value="登录" /><select name="saveTime">
  10. <option value="366">一年</option>
  11. <option value="183">半年</option>
  12. <option value="30">一个月</option>
  13. <option value="7">一周</option>
  14. </select>
  15. </form>
  16. </body>
  17. </html>
  18. </span>

那么从上面可看到可选择保存自动登录的期限,可以是一年,半年,一个月,一周,当然这都是以天为单位的

服务类:LoginService

Java代码  
  1. <span style="font-size: medium;">package com.login.servlet;
  2. public class LoginService {
  3. public static boolean login(String username, String password) {
  4. if ("admin".equals(username) && "123456".equals(password)) {
  5. return true;
  6. } else {
  7. return false;
  8. }
  9. }
  10. }
  11. </span>

业务处理servlet:LoginServlet

Java代码  
  1. <span style="font-size: medium;">package com.login.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.Cookie;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class LoginServlet extends HttpServlet {
  9. public void doGet(HttpServletRequest request, HttpServletResponse response)
  10. throws ServletException, IOException {
  11. this.doPost(request, response);
  12. }
  13. public void doPost(HttpServletRequest request, HttpServletResponse response)
  14. throws ServletException, IOException {
  15. String username=request.getParameter("username");
  16. String password=request.getParameter("password");
  17. String savetime=request.getParameter("saveTime");
  18. if(LoginService.login(username, password)){
  19. if(null!=savetime&&!savetime.isEmpty()){
  20. int saveTime=Integer.parseInt(savetime);//这里接受的表单值为天来计算的
  21. int seconds=saveTime*24*60*60;
  22. Cookie cookie = new Cookie("user", username+"=="+password);
  23. cookie.setMaxAge(seconds);
  24. response.addCookie(cookie);
  25. }
  26. request.setAttribute("username",username);
  27. request.getRequestDispatcher("/main.jsp").forward(request,response);
  28. }else{
  29. request.getRequestDispatcher("/index.jsp").forward(request,response);
  30. }
  31. }
  32. }
  33. </span>

看清上面处理Cookie的方式步骤:其实这是为第一次登录该网站时【前提是选择了保存自动登录期限时间】处理Cookie,只要这一步处理成功,以后都无需经过这个Servlet因为我们接下来要在请求到达前,从Cookie中取出我们的用户名和密码,这样的话就需要一个过滤器了

Java代码  
  1. <span style="font-size: medium;">package com.login.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.http.Cookie;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. public class IndexFilter implements Filter {
  13. public void destroy() {
  14. // TODO Auto-generated method stub
  15. }
  16. public void doFilter(ServletRequest arg0, ServletResponse arg1,
  17. FilterChain arg2) throws IOException, ServletException {
  18. HttpServletRequest request = (HttpServletRequest) arg0;
  19. HttpServletResponse response = (HttpServletResponse) arg1;
  20. Cookie[] cookies = request.getCookies();
  21. String[] cooks = null;
  22. String username = null;
  23. String password = null;
  24. if (cookies != null) {
  25. for (Cookie coo : cookies) {
  26. String aa = coo.getValue();
  27. cooks = aa.split("==");
  28. if (cooks.length == 2) {
  29. username = cooks[0];
  30. password = cooks[1];
  31. }
  32. }
  33. }
  34. if (LoginService.login(username, password)) {
  35. request.getSession().setAttribute("username",username);
  36. response.sendRedirect("main.jsp");
  37. //request.getRequestDispatcher("/main.jsp").forward(request, response);
  38. }else{
  39. arg2.doFilter(request,response );
  40. }
  41. }
  42. public void init(FilterConfig arg0) throws ServletException {
  43. // TODO Auto-generated method stub
  44. }
  45. }
  46. </span>

我这里所说的请求到达之前,不是指的某个路径匹配的servlet而是指的就是在输入网址到达登录页面前就要进行自动登录的处理,那么web.xml中应该怎么配置呢

Xml代码  
  1. <span style="font-size: medium;"><?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <filter>
  8. <filter-name>loginFilter</filter-name>
  9. <filter-class>com.login.servlet.IndexFilter</filter-class>
  10. </filter>
  11. <filter-mapping>
  12. <filter-name>loginFilter</filter-name>
  13. <url-pattern>/index.jsp</url-pattern>
  14. </filter-mapping>
  15. <servlet>
  16. <servlet-name>LoginServlet</servlet-name>
  17. <servlet-class>com.login.servlet.LoginServlet</servlet-class>
  18. </servlet>
  19. <servlet-mapping>
  20. <servlet-name>LoginServlet</servlet-name>
  21. <url-pattern>/login.do</url-pattern>
  22. </servlet-mapping>
  23. <welcome-file-list>
  24. <welcome-file>login.jsp</welcome-file>
  25. </welcome-file-list>
  26. </web-app>
  27. </span>

看见了没有,上面的filter匹配路径只是针对一个页面,与通常写/*匹配所有请求到达之前是不一样的写法哦

主页面:main.jsp

Html代码  
  1. <span style="font-size: medium;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4. <title>My JSP 'maiin.jsp' starting page</title>
  5. </head>
  6. <body>
  7. 登录成功,欢迎${username}的到来
  8. </body>
  9. </html>
  10. </span>

输入地址:http://localhost:8080/WebApp/login.jsp,出现登录页面

然后输入:admin,123456 ,选择一个保存日期

这样第一次登录成功之后,是经由LoginServlet处理了,由于选择了日期,所以Cookie中保存了用户信息,所以之后再输入同样地址后,不会出现登录页面,就不再经过LoginServlet处理【因为LoginServlet处理的是登陆页面上登录按钮请求的】,而直接提前交由IndexFilter处理,直接进入主页面,明白了么?

转载于:https://www.cnblogs.com/start-fxw/articles/4727481.html

cookie自动登陆相关推荐

  1. 【Servlet】请求转发、重定向、Cookie使用之三天自动登陆

    三天自动登陆项目源码:GitHub地址-LoginSystem JDBC 手写SORM框架 手写Servlet 开发环境:Eclipse 一.请求乱码问题解决 // 设置请求.响应编码格式req.se ...

  2. 14.cookie与自动登陆

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

  3. ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要...

    ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm --  Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...

  4. cookie实现自动登陆原理

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

  5. cookie自动登录

    一.什么是用户自动登录? 对于我们的网站向已注册用户提供某些专门的服务,比如网上购物.在线下载.收费浏览等等,就会要求用户在使用这些服务之前进入登录页面,输入用户名和密码,并进行验证. 如果用户经常访 ...

  6. 基于fiddler的网络爬虫校园网自动登陆系统

    最近校园网(需要WEB登陆)不太稳定,总是掉线,于是想写一个基于网络爬虫的校园网自动登陆系统,让程序自动每隔一段时间自动检测网络连通性,查了一些资料,最后用了Fiddler软件进行网络监听,对网页ht ...

  7. [SpringSecurity]web权限方案_自动登陆_原理分析和具体实现

    自动登陆 1.cookie技术 2.安全框架机制实现自动登陆 这里我们使用安全框架机制实现自动登陆技术 实现原理 具体实现 第一步 创建数据库 CREATE TABLE `persistent_log ...

  8. curl模拟自动登陆采集网页数据

    <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content=&quo ...

  9. 解决关闭浏览器后再打开,访问网站仍然自动登陆的问题

    情况描述: 今天被授权以管理员身份登录管理系统,录入一些信息,但因为Chrome设置的是保存Cookie,并且先登录了自己的账号,所以即便关掉浏览器再打开,仍然是以自己的账号自动登录,而页面的注销按钮 ...

最新文章

  1. R语言使用pROC包绘制ROC曲线并使用smooth函数绘制平滑的ROC曲线(方法包括:binormal、density、fitdistr、logcondens、logcondens.smooth)
  2. linux系统io查看计算,Linux下查看进程IO工具iopp
  3. 基础省选+NOI-第2部分 数据结构进阶(II)
  4. 暴力技术(一)——BFS广(宽)度优先搜索
  5. 别让小小的“短信验证码”毁了用户体验
  6. 至读博客朋友的一封信
  7. 表贴电阻尺寸与什么有关_什么是LED点光源屏?常见的LED点光源规格和型号
  8. [2019杭电多校第五场][hdu6629]string matching(扩展kmp)
  9. css阿拉伯数字,css 古文排版(含阿拉伯数字)
  10. js解密学习--steam登入密码解密分析
  11. ftp 服务器文件夹创建命令,ftp 服务器文件夹创建命令
  12. java qq协议 php_Java基于JavaMail实现向QQ邮箱发送邮件
  13. 内存测试软件 ddr4,RAMCHECK LX DDR4 PRO/DDR3 内存测试仪
  14. 2020第十一届蓝桥杯省赛C组第一场
  15. 手机无法与电脑360助手连接到服务器失败,360手机助手怎么连接不上手机怎么办...
  16. Linux删除只读文件系统
  17. 移动网络运营商显示无服务器,无线路由器忽然拨不上号,显示网络运营商远端无响应怎么处理...
  18. 浙大计算机学院辅导员,浙大博士应聘辅导员被指丢脸 月薪仅1000元
  19. 近段时间整理出的三款Android游戏源码
  20. 闪马智能X浙大校友会|发现不凡境界,科技塑造未来

热门文章

  1. uva 11080(二分图染色)
  2. windows 安装ipython
  3. STP 简介----PVST+ RSTP和快速PVST+ (1)
  4. php5.5 ts vc11 x64,windows版 rar-3.0.2扩展插件 php_rar-3.0.2-5.5-ts-vc11-x64,php5.5 rar-3.0.2扩展插件...
  5. Serial Old收集器
  6. 轻量级锁的加锁和解锁逻辑-自旋锁
  7. MyBatis 缓存详解-cache 缓存
  8. 常用函数式接口之Consumer
  9. 分布式缓存Redis介绍
  10. 数据仓库分层和元数据管理