`

Java代码实现自动登录功能

 
阅读更多

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

登录页面: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.       
  10.     <input type="submit" value="登录" /><select name="saveTime">  
  11.     <option value="366">一年</option>  
  12.     <option value="183">半年</option>  
  13.      <option value="30">一个月</option>   
  14.      <option value="7">一周</option>  
  15.     </select>  
  16.   </form>  
  17.   </body>  
  18. </html>  
  19. </span>  

 

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

服务类:LoginService

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

业务处理servlet:LoginServlet

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

 

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

Java代码  收藏代码
  1. <span style="font-size: medium;">package com.login.servlet;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.Filter;  
  6. import javax.servlet.FilterChain;  
  7. import javax.servlet.FilterConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletRequest;  
  10. import javax.servlet.ServletResponse;  
  11. import javax.servlet.http.Cookie;  
  12. import javax.servlet.http.HttpServletRequest;  
  13. import javax.servlet.http.HttpServletResponse;  
  14.   
  15. public class IndexFilter implements Filter {  
  16.   
  17.     public void destroy() {  
  18.         // TODO Auto-generated method stub  
  19.   
  20.     }  
  21.   
  22.     public void doFilter(ServletRequest arg0, ServletResponse arg1,  
  23.             FilterChain arg2) throws IOException, ServletException {  
  24.         HttpServletRequest request = (HttpServletRequest) arg0;  
  25.         HttpServletResponse response = (HttpServletResponse) arg1;  
  26.         Cookie[] cookies = request.getCookies();  
  27.         String[] cooks = null;  
  28.         String username = null;  
  29.         String password = null;  
  30.         if (cookies != null) {  
  31.             for (Cookie coo : cookies) {  
  32.                 String aa = coo.getValue();  
  33.                 cooks = aa.split("==");  
  34.                 if (cooks.length == 2) {  
  35.                     username = cooks[0];  
  36.                     password = cooks[1];  
  37.                 }  
  38.             }  
  39.         }  
  40.         if (LoginService.login(username, password)) {  
  41.             request.getSession().setAttribute("username",username);  
  42.             response.sendRedirect("main.jsp");  
  43.             //request.getRequestDispatcher("/main.jsp").forward(request, response);  
  44.         }else{  
  45.             arg2.doFilter(request,response );  
  46.         }  
  47.       
  48.   
  49.     }  
  50.   
  51.     public void init(FilterConfig arg0) throws ServletException {  
  52.         // TODO Auto-generated method stub  
  53.   
  54.     }  
  55.   
  56. }  
  57. </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.   
  20.   <servlet-mapping>  
  21.     <servlet-name>LoginServlet</servlet-name>  
  22.     <url-pattern>/login.do</url-pattern>  
  23.   </servlet-mapping>  
  24.   <welcome-file-list>  
  25.     <welcome-file>login.jsp</welcome-file>  
  26.   </welcome-file-list>  
  27. </web-app>  
  28. </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处理,直接进入主页面,明白了么?

分享到:
评论

相关推荐

    使用Java servlet实现自动登录退出功能

    主要介绍了使用Java servlet实现自动登录退出功能,,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    java实现自动补全功能

    java ajax实现自动补全功能,代码完整,经过调试运行不会出错,有需要的朋友下载

    课程作业-基于Java实现web实验登录界面源码+项目说明.zip

    课程作业-基于Java实现web实验登录界面源码+项目说明.zip课程作业-基于Java实现web实验登录界面源码+项目说明.zip课程作业-基于Java实现web实验登录界面源码+项目说明.zip课程作业-基于Java实现web实验登录界面源码+...

    微信公众平台 JAVA开发代码(实现菜单,自动回复,关注事件等)

    微信公众平台,开发者模式下的Java实现。实现菜单,自动回复,关注事件等!利用SpringMVC框架实现。如有疑问,可以关注我的博客~

    Java代码实现时间服务器.rar

    Java代码实现时间服务器,让客户端设备通过服务器校准和获取最新的时间,和Windows时间自动更新的功能类似。  int port=13; //端口号  ServerSocket serverSocket; //服务器套接字  public TimeServer(){  ...

    根据数据库sql生成java代码代码生成器

    生成的文件复制到项目路径中,修修改改即可实现大部分CRUD功能。 2、工具不需要导入到项目中,本地执行就可以,生成基本的增删改查功能代码。 3、生成的代码有注释和swagger注解,并且实体中有mybatisplus注解 4、...

    java流程自动化工具

    二、环境搭建:以java应用来讲,比如安装jdk,tomcat,zookeeper,mq,hbase,mysql等等都可以实现自动化。 三、应用部署:GIT代码拉取,MAVEN打包,SFTP上传,Linux脚本执行,自动化一气呵成,且轻松实现切换用户等...

    自动备份数据库java源码

    简单的自动备份数据库 只添加sqlserver 其他数据库自己添加 写个bat 就可以实现自动备份

    Java自动点击鼠标所在的位置

    Java代码自动点击屏幕中鼠标所在的位置

    Java 模仿谷歌搜索框中输入下拉提示(自动补全)功能 源代码

    模仿谷歌搜索框中输入下拉提示(自动补全)功能,访问数据库调去数据,内有数据库SQL文件,数据库JDBC连接方式,记得填写正确的username="" password="" 在tomcat 的lib文件夹中 中导入mysql 驱动包【mysql包文件夹中有...

    自动生成Java源代码,轻松实现J2EE 的MVC架构开发

    根据Java模板及建表SQL脚本,由程序JframeClass.exe自动生成Java的Model及Controller类源代码文件,轻松实现J2EE 的MVC架构开发。 生成后类文件功能视模板类而定,本程序包中的自带的模板类含有如下方法及功能: 1、...

    Java基于遗传算法的自动排课系统源码.zip

    3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 Java基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动排课系统源码.zipJava基于遗传算法的自动...

    电子发票源代码(java)

    自动识别两种电子发票格式:PDF及OFD。此代码已在生产系统中应用,运行状况良好。注意:record_wg是日志类,请自己删除,不影响功能。包含使用到的zxing-3.3.3jar包

    JAVA语言的文本编辑器的毕业设计,采用JAVA Swing框架进行开发,并使用JavaFX实现代码高亮和自动补全功能

    该文本编辑器采用JAVA Swing框架进行开发,并使用JavaFX实现代码高亮和自动补全功能。具体实现思路如下: ### 1. 打开、保存、新建文本文件 使用JFileChooser类实现文件的打开、保存和新建功能。用户可以通过菜单...

    JAVA上百实例源码以及开源项目源代码

    Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...

    java源码包---java 源码 大量 实例

    Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java...

    JFrame 代码自动生成工具

    JFrame应用软件开发平台是一个基于JavaEE的面向应用软件开发的框架及自动化代码生成平台。通过使用JFrame,应用软件的开发不再需要重头做起,只需通过JFrame自动代码生成工具配置、生成业务代码,并在此基础上简单地...

    酒店管理系统Java源代码

    酒店管理系统的需求包括开台点菜功能、智能化获取菜品功能、自动结账功能、营业额报表功能等。依据餐饮行业的特点,本系统实现以下目标: 操作简单方便、界面简洁大方。 方便快捷的开台点菜功能。 智能化定位...

    java自动发送邮件代码

    java 自动发送邮件的代码片段 注释全面 拷贝过来就可以了 我的功能已实现后才上传

    基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip

    基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码+项目说明.zip基于Java实现的自动提取PDF论文文章标题作为该PDF的文件名源码...

Global site tag (gtag.js) - Google Analytics