实现Java Web程序的自动登录

简介:
有很多Web 程序中第一次登录后,在一定时间内(如2 个小时)再次访问同一个Web 程序时就无需再次登录,而是直接进入程序的主界面(仅限于本机)。实现这个功能关键就是服务端要识别客户的身份。而用Cookie 是最简单的身从验证。
如果用户第一次登录,可以将用户名作为Cookie 写到本地,代码如下:

Cookie cookie  =   new  Cookie( " user " , user);
cookie.setMaxAge(
365   *   24   *   3600 );
cookie.setPath(
" / " );
response.addCookie(cookie);

    当用户再次访问程序时,服务端程序应该检测这个 Cookie 是否存在,代码如下:

Cookie[] cookies = request.getCookies();
for (Cookie cookie: cookies)
{
    if (cookie.getName().equals(user))
    {
        
//  如果user Cookie存在,进行处理
         break ;
    }
}

    尽管从客户端可以获得 User Cookie ,但这上 Cookie 可能存在很长时间,而且仅凭这个 Cookie 就自动登录并不安全,因此,可以在服务端使用一个 Session 来管理用户。也就是当第一次登录成功后,就创建一个 Session ,并将用户的某些信息保存在 Session 顺。代码如下:

HttpSession session  = request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(
2   *   3600 );   //  Session保存两小时

     
当再次访问程序时,确定了 cookie 存在后,就会继续验证 User Session 的存在,代码如下:

Cookie[] cookies = request.getCookies();
for (Cookie cookie: cookies)
{
    if (cookie.getName().equals(user))
    {
        
if (session.getAttribute(user)  !=   null )
        {
            
//  直接forward到主界面
            break ;
        }
        else
        {  
            
//  forward到登录界面
         }
     }
}

    虽然上面的代码可以很好地实现自动登录功能,但是当浏览器关闭,再次启动后,由于 Servlet 用于保存 Session ID JSESSIONID Cookie 是临时的(也就是说不是持久 Cookie ,当浏览器关闭后,这个 Cookie 就会被删除),因此,需要将 JSESSIONID 进行持久化。代码如下:

HttpSession session  =  request.getSession();
session.setAttribute(user, user);
session.setMaxInactiveInterval(
2   *   3600 );   //  Session保存两小时
Cookie cookie  =   new  Cookie( " JSESSIONID " , session.getId());
cookie.setMaxAge(
2   *   3600 );   //  客户端的JSESSIONID也保存两小时
session.setMaxInactiveInterval(interval)
cookie.setPath(
" / " );        
response.addCookie(cookie);

如果使用上面的代码,即使浏览器关闭,在两小时之内,Web 程序仍然可以自动登录。
如果我们自已加一个JSESSIONID Cookie ,在第一次访问Web 程序时,HTTP 响应头有两个JSESSIONID ,但由于这两个JSESSIONID 的值完全一样,因此,并没有任何影响。如果在响应头的Set-Cookie 字段中有多个相同的Cookie ,则按着path name 进行比较,如果这两个值相同,则认为是同一个Cookie ,最后一个出现的Cookie 将覆盖前面相同的Cookie ,如下面的两个Cookie ,最后一个将覆盖前一个:
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web
     由于下面两个Cookie path 不同,因此,它们是完全不同的两个Cookie
Set-Cookie: JSESSIONID=DDB2274CAC6739E1D6747B0043D5D90E; Path=/web1
Set-Cookie: JSESSIONID=mysession; Expires=Thu, 05-Jun-2008 05:02:50 GMT; Path=/web2

谁有其他的方法实现自动登录,请跟贴!





 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/215331,如需转载请自行联系原作者


相关文章
|
1月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
294 64
|
2月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
278 0
|
2月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
140 0
|
5月前
|
安全 测试技术 Linux
Acunetix v25.4 发布 - Web 应用程序安全测试
Acunetix v25.4 (Linux, Windows) - Web 应用程序安全测试
173 3
Acunetix v25.4 发布 - Web 应用程序安全测试
|
4月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
86 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
7月前
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
94 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
|
6月前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
105 4
|
6月前
|
Java 编译器
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
105 3
|
6月前
|
自然语言处理 安全 测试技术
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
337 0
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
|
6月前
|
存储 Java 数据库连接
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004

热门文章

最新文章