用户登录流程详解:从账号密码输入到后台验证的完整步骤

2025-01-04
来源:网络整理

逐步实施项目:登录

“请输入您的账号和密码”

这样的说法你一定很熟悉。现在的app基本上都需要这样的操作。毕竟我们正处于大数据时代。合法收集用户信息以更好地为用户服务是当今常用的方法。今天我就告诉你:

当您打开APP时,首先看到的是登录/注册。登录和注册无处不在,基本上任何APP都需要。

用户登录

在各大信息管理系统中,登录功能是必不可少的。其功能是验证用户的身份并确定用户是否是本网站的会员。只有会员才能访问当前系统。

登录实现步骤:

1、用户填写账号和密码并提交给后台

2、后台获取账号和密码后,发送到数据库进行查询

3、如果查询结果为空,则说明用户填写的账号或密码不正确,应返回用户登录页面并提示重新输入。

4、如果查询结果不为空,则说明用户填写的账号和密码正确,将对应的账号信息分享给(后续请求中,我们需要继续使用当前登录的用户信息),然后跳转到网站主页

按照上面的步骤,我们使用下面的代码来完成相应的功能

1. 登录页面

登录

页面中有很多布局相关的代码。您可以跳过它并专注于与表单元素相关的标签。

@(“/”)

br/>

页面中有很多布局相关的代码。您可以跳过它并专注于与表单元素相关的标签。

@(“/”)

=新的();

创新互联网网站建设专注于聂荣企业网站建设、成都响应式网站建设公司、电商商城网站建设。聂荣网站建设公司为聂荣等地区提供网站建设服务。全流程按需建站策划、专业设计、全程项目跟踪,以创新的互联网建站专业精神和态度为您提供服务

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String password = req.getParameter("password"); Employee currentUser = service.login(name, password); if(currentUser==null){ //登录失败 req.setAttribute("errorMsg","亲,账户或者密码错误"); req.getRequestDispatcher("/login.jsp").forward(req,resp); return; }else{ //登录成功 req.getSession().setAttribute("USER_IN_SESSION",currentUser); resp.sendRedirect("/employee"); return; }

SQL:

来自姓名=?和=?

登录失败效果

登录成功效果

用户注销 用户注销功能的主要作用是保护用户的账户安全。当用户点击安全退出时,我们需要删除与本次会话相关的信息。

删除方法有两种:

1.删​​除当前登录的用户信息

存在一个问题:本次会话的其他信息还保存在内存中,没有及时清理。

@(“/”)

br/>用户注销功能的主要作用是保护用户的账户安全。当用户点击安全退出时,我们需要删除与本次会话相关的信息。

删除方法有两种:

1.删​​除当前登录的用户信息

存在一个问题:本次会话的其他信息还保存在内存中,没有及时清理。

@(“/”)

=新的();

void (req, resp) , {req.().("");

分别(“/.jsp”);

2. 毁掉整个东西(推荐)

@(“/”)

br/>req.().("");

分别(“/.jsp”);

2. 毁掉整个东西(推荐)

@(“/”)

=新的();

void (req, resp), {

请求.().();

分别(“/.jsp”);

验证码

验证码是每个系统必不可少的功能。主要用于防止系统被恶意入侵。如果没有这个功能,我们的系统就会像一扇没有上锁的门。小偷随时可能进来,做坏事。

那么我们来看看登录时如何使用验证码。如果想使用其他模块,原理也是一样的。

1、首先需要在登录页面显示一张验证码图片。用户可以根据图中的文字填写验证码。

2、同时,在生成验证码时,我们需要保存正确的验证码,以供后期验证。

3、用户填写验证码后,提交表单并进行后台验证。

注意:生成验证码的代码不是我们这里的重点。以后如果需要的话可以网上搜一下,我就不贴了。

检查代码

//验证验证码是否正确

n = () 要求.().("N");

= 要求。("");

如果 (!.() && !.(n)) {

如果 (!.(n)) {

= new(“姓名”,姓名);

=新的(“”,);

分别();

分别();

(req, resp, "亲,验证码错误");

} 别的 {

(req, resp, "验证码不能为空或验证码已过期");

无效(请求,响应,)

,

请求。()。("", );

分别(“/.jsp”);

当用户未填写验证码或验证码无效时,应给出错误信息。

如果用户填写的验证码与保存的验证码不匹配,则会给出错误提示。

这样当验证码不正确时,我们就不会继续做登录验证。我们必须等待用户填写正确的验证码,而这是机器无法完成的。

记住账号

该功能的主要目的是提高用户体验,用户登录一次后下次就不用再重新填写账号了。

为了实现这个功能,我们需要在后台共享用户的账户信息

但是,我们应该用什么来实现共享呢?

来吧,想想我们的需求。今天早上十点我第一次登录系统。使用完后,我关闭了浏览器。下午我需要登录几次。明天和后天……

那我想在这个要求下我就不需要再填写账号了。

在这样的需求下,相信大家都能想到一个答案——

数据保存在浏览器中,我们可以设置保存时间,以便关闭浏览器后可以继续使用。

因此,这是我们针对这个需求的最佳解决方案

在登录业务逻辑中添加以下代码,保存账户相关信息以供使用。

//记住账号

= 要求。("");

如果 (!。()) {

//保存用户信息于

= new(“姓名”,姓名);

.(60 60 24);

Cookie rememberMeCookie = new Cookie("rememberMe", rememberMe); rememberMeCookie.setMaxAge(60 * 60 * 24); resp.addCookie(nameCookie); resp.addCookie(rememberMeCookie); } else { //将用户信息从Cookie中移除 Cookie[] cookies = req.getCookies(); for (Cookie cookie : cookies) { if ("name".equals(cookie.getName()) || "rememberMe".equals(cookie.getName())) { cookie.setMaxAge(0); resp.addCookie(cookie); } } }

然后,获取登录页面的数据

="${.name.}">

选择记住我后,登录错误返回到登录页面。此时可以自动获取最后的账户信息。

登录检查

当用户未登录时,除了登录之外,不允许访问系统中的其他模块。如果他访问,他应该直接返回到登录页面。

中,解决这个问题的最佳方法是使用()

过滤器:能够在访问目标资源之前预处理请求,并在响应离开之前预处理响应。

在我们的需求中,我们需要对请求进行预处理,在请求当前资源之前检查用户是否已经登录。

实施步骤:

1. 定义过滤器:

{

列表;

public void init(FilterConfig filterConfig) throws ServletException { //获取到需要校验的资源名称(如果需要校验的资源较多,可以配置不需要校验的资源) String needCheckURI = filterConfig.getInitParameter("needCheckURI"); String[] split = needCheckURI.split(","); //将所有的资源名存放到集合中,待后面进行校验 needCheckURIs = Arrays.asList(split); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; //获取当前请求的资源名 String requestURI = req.getRequestURI(); //如果当前请求的资源是不需要校验的,直接放行 if(!needCheckURIs.contains(requestURI)){ filterChain.doFilter(req, resp); return; } //如果需要校验,判断用户是否登录,是,则放行,反之回到登录页面 Object currentUser = req.getSession().getAttribute("USER_IN_SESSION"); if (currentUser == null) { resp.sendRedirect("/login.jsp"); return; } filterChain.doFilter(req, resp); } public void destroy() { }

2. 将过滤器留给服务器管理

cn..网..

/,/

/*

通过这个过滤器,用户不再能够在未登录的情况下直接访问相关资源,实现了基本的安全控制。

生成系统账号

当系统启动时,我们需要在用户表中拥有一个最小的管理员帐户,以便用户可以登录来管理整个系统。

那么,在启动服务器时如何完成这个需求呢?

其实解决办法有很多,大家应该都能想到。

1.

默认情况下,第一次访问时进行初始化

但也可以在启动服务器时调整为0

初始化时,会执行当前的init方法。

因此,我们在这个方法中完全满足了这个要求

2.

过滤器在启动服务器时初始化

同理,初始化时会执行init方法

因此,这个需求也可以在init方法中完成

3.

之前研究过WEB中的监听器,知道它可以监听作用域(创建/销毁)以及作用域内的属性(添加/删除/修改)。

我们的要求是在启动服务器时创建一个默认帐户

启动服务器时,此时会创建对象

综上所述,我们可以创建一个函数对象监听器,并在创建对象时完成默认账户的创建。

以上三种方法都可以满足我们的需求,但是最终考虑到职责分离的原则,我们应该选择使用监听器,其实现如下

创建监听器

呃{

=新的();

空白 ( ) {

//查询系统默认账户是否存在,如果不存在则创建默认账户

= .();

如果(==空){

=新的();

.("");

.("1");

。(真的);

。节省();

public void contextDestroyed(ServletContextEvent servletContextEvent) { }

注册监听器

cn..网..

这样,当启动服务器时,它会首先查询表,看是否有默认的管理员帐户。

点击查看该系列其他文章

一步步教你如何做项目:项目需求分析

一步一步教你如何做项目:前端界面

一步一步教你如何做项目:多条件过滤

分享