Java Web实现自动登陆功能
作者:Lukegwo 发布时间:2023-09-06 04:17:53
标签:Java,Web,自动登陆
Java对自动登陆功能的简单实现,仅用到了servlet和一个filter。第一次写博文,如有不足的地方,敬请指正,谢谢。
登陆界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>登陆页面</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/LoginAction" method="post">
用户名:<input type=“text” name="name" > <br>
密 码:<input type=“password” name="passwd" > <br>
保存时间<select name="savetime">
<option value="7">一 周</option>
<option value="30">一个月</option>
</select><br>
<input type="submit" value="登陆">
</form>
</body>
</html>
填写完用户名和密码后选择保存时间。这里就没有设置不保存选项,默认保存时间是一周。
LoginBiz类,负责校验用户输入的用户名和密码是否正确。
package com.autologin;
public class LoginBiz {
static boolean isValid(String name,String passwd){
if(name.equals("admin")&&passwd.equals("1234")){
return true;
}else{
return false;
}
}
}
本类为LoginAction提供服务,相当于Biz层。
LoginAction类,负责页面跳转。
package com.autologin;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginAction extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name=request.getParameter("name");
String passwd=request.getParameter("passwd");
String savetimeString=request.getParameter("savetime");
if(new LoginBiz().isValid(name, passwd)){
int savetime=Integer.parseInt(savetimeString)*24*3600;
Cookie loginInfo=new Cookie("loginInfo",name+","+passwd);
loginInfo.setMaxAge(savetime);
response.addCookie(loginInfo);
response.sendRedirect("/TestWeb/success.jsp");
}else{
response.sendRedirect("/TestWeb/error.jsp");
}
}
}
用户第一次登陆时会调用此servlet来验证用户信息和设置cookie。根据登陆时的设置的时间计算出秒数,然后把保存有用户名和密码的Cookie(loginInfo)add到客户端。为了方便用户名和密码设置在了一个cookie中,用","隔开。(真正项目中,当然要给密码做加密处理。)
如果第一次成功登陆,再次请求login.jsp时即可直接跳转到success页面,无需再次输入用户名和密码,这里就用到了下面这个Filter。
CheckFilter类
package com.autologin;
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.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CheckFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
Cookie[] cookies=request.getCookies();
String name = "";
String passwd = "";
if(cookies!=null){
for(Cookie coo:cookies){
if(coo.getName().equals("loginInfo")){
String[] info=coo.getValue().split(",");
name=info[0];
passwd=info[1];
}
}
}
//如果在cookie中得到保存的用户名和密码,验证正确后,直接转到success页
if(new LoginBiz().isValid(name, passwd)){
response.sendRedirect("/TestWeb/success.jsp");
}else{
arg2.doFilter(request, response);
}
}
public void init(FilterConfig arg0) throws ServletException {
}
}
当用户请求login.jsp页面时,首先会通过此Filter,这时会尝试从请求信息的Cookie中得到用户名和密码,如果是第一次登陆没有设置过Cookie,那么会把登陆请求交给LoginAction处理。如果之前成功登陆过,就已保存有Cookie,获取到正确的用户名和密码并验证成功(安全起见,这里再次验证)后直接跳转到success页面,此时就不经过LoginAction了。
配置文件如下:
<servlet>
<servlet-name>LoginAction</servlet-name>
<servlet-class>com.autologin.LoginAction</servlet-class>
</servlet>
<filter>
<filter-name>CheckFilter</filter-name>
<filter-class>com.autologin.CheckFilter</filter-class>
</filter>
<servlet-mapping>
<servlet-name>LoginAction</servlet-name>
<url-pattern>/LoginAction</url-pattern>
</servlet-mapping>
<filter-mapping>
<filter-name>CheckFilter</filter-name>
<url-pattern>/login.jsp</url-pattern>
</filter-mapping>
第一次登陆成功后,chrome保存的Cookie信息
来源:https://blog.csdn.net/dream_goon/article/details/17496673
0
投稿
猜你喜欢
- 本文实例讲述了Android编程使用pull方式解析xml格式文件的方法。分享给大家供大家参考,具体如下:上次已经说过使用Android s
- 前言话不多说,直接上图:笔者使用 RecyclerView 的 ItemTouchHelper 来实现这个效果,过程非常简单。为了学习,这里
- dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源工具。可以在这个地址ht
- 1. 问题所示编译ssm的项目的时候出现了这个错误导致一直运行不起来SLF4J: Failed to load class "or
- PowerMockito 测试静态方法假如有下面一个类DemoStatic,它里面定义了各种静态方法,这些静态方法可能是一些Utilitie
- 在C# Winform 应用程序中,获取某网页的源文件,可以用以下方法:首先引入名称空间using System.IO;using Syst
- 上传临时文件被删除引起报错的解决1.前言在项目中使用到了SpringBoot的上传实现了一个excel导入功能,上线后稳得一批,但突然有一天
- 本文实例讲述了Java编程调用微信接口实现图文信息等推送功能。分享给大家供大家参考,具体如下:Java调用微信接口工具类,包含素材上传、获取
- SpringBoot 中配置redis作为session 缓存器。 让shiro引用本文是建立在你是使用这shiro基础之上的补充内容第一种
- Spring Boot 简介spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框
- 以公司和员工为例:公司是一,员工是多第一步 创建两个实体类,公司和员工写核心配置文件hibernate.cfg.xml写映射配置文件Comp
- jdk下载并配置下载jdk下图是自己资源管理器中jdk的安装路径,双击然后next就好,不需要改什么配置手里没有安装包的,下载地址在这里 :
- 本文实例讲述了C#数据结构之单链表(LinkList)实现方法。分享给大家供大家参考,具体如下:这里我们来看下“单链表(LinkList)”
- 关于Retrofit的学习,我算是比较晚的了,而现在Retrofit已经是Android非常流行的网络请求框架了。之前,我没有学过Retro
- 这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,
- 本文实例为大家分享了Android自定义View实现九宫格图形解锁的具体代码,供大家参考,具体内容如下效果:代码:package com.e
- 复合语句Java的复合语句是以整个区块为单位的语句,由{}以及{}内包含的内容组成对于复合语句来说,复合语句创建了一个局部变量的作用域,该作
- 1.如下图中的检测值存到数据库是科学计数法2 经过代码处理后3 只需要对你读到的字符串进行如下操作BigDecimal bd = new B
- 最近IDEA打可执行Jar包搞了三天,一直失败,好好学习一下Maven-assembly,在此记录一下1. 需求项目打包,满足以下要求:1.
- 本文实例讲述了Java实现数据库连接池的方法。分享给大家供大家参考。具体如下:package com.kyo.connection;impo