Smiling & Weeping

                    ----以花祈愿,祝你平安

当用户输入用户名和密码将数据提交给数据库进行查询,如果存在对应的用户名和密码,则表示登陆成功,登录成功之后跳转到系统的主页就是index.html页面,跳转在前端使用jQuery来完成

1.登录-持久层

1.1增删改--规划需要执行的SQL语句

依据用户提交的用户名和密码做select查询.密码的比较在业务层

selct * from t_user where username=?

某一个功能模块已经被开发完成了,所以可以省略当前开发,这个分析过程不能省略

1.2接口设计和抽象方法

不用重复开发。单元测试也是不需要单独执行。

2.登录-业务层

2.1规划相关异常

2.1.1.用户名对应的密码错误,密码匹配失败:PasswordNotMatchException异常,运行时异常,业务异常

2.1.2.用户名没有被找到,抛出异常:UsernameNotFoundException

2.1.3.异常的编写:

业务层异常需要继承ServiceException异常类

在具体的异常类中构造方法(可以使用快捷键)

2.2设计业务层接口和抽象方法

2.2.1直接在IUserService接口中编写抽象方法,login(String username , String password),将当前登录成功的用户数据以当前用户对象的形式进行返回。状态管理:可以将数据保存在cookie或者session中,可以避免重复度很高的数据多次频繁数据操作进行获取(用户名、用户id-存放session中 , 用户头像-cookie)

2.2.2需要在实现类中实现父接口的抽象方法。

2.2.3在测试类中测试是否可以通过

2.3抽象方法的实现

3.登录-控制层

3.1处理异常

业务层抛出的异常是什么,需要在统一异常处理类中进行统一的捕获和处理,如果也曾抛出异常类型已经在统一的异常处理类中曾经处理过,则不需要重复添加。

3.2设计请求

请求路径:/users/login

请求方式:POST

请求数据:String phone , String password

相应结果:JsonResult<User>

3.3处理请求

在UserController类中编写请求方法。

4.用户-前端登录

用户会话session

session对象主要存在服务器端,可以用于保存服务器的临时数据的对象,所保存的数据可以放在整个项目中都可以通过访问来获取,把session的数据看做一个共享数据。首次登录的时候所获取的用户的数据,转移到session对象即可。session.getAttrbute("key"),可以将获取session中的数据进行封装,封装放在BaseController

拦截器:

将所有请求统一拦截到拦截器,可以在拦截器中定义过滤的规则,如果不满足系统的过滤规则,统一的处理是重新去打开login.html页面(重定向和转发),推荐使用重定向。(重定向:发送请求url,根据服务器的返回信息重新发送新的请求URL,转发:发送url,服务器内部解析后进行新的请求,整个过程中发生在服务器内部,外部不知)

在SpringBoot项目中做拦截器的定义和使用。SpringBoot是依靠SpringMVC来完成的。SpringMVC提供了一个HandlerInterceptor接口,用于表示定义一个拦截器。首先自定义一个类,再让一个类实现一个接口。

1.自定义一个类,在这个类实现这个HandlerInterceptor接口

2.注册过滤器:添加白名单(那些资源可以在不登录的情况下访问:login.html\register.html\login\reg\index.html\product.html)、添加黑名单(在用户登录的状态才可以访问的页面资源)。

3.注册过滤器的技术:借助WebMVCConfigure接口,可以将用户定义的拦截器进行注册,才可以保证拦截器能够生效和使用。定义一个类,然后让这个类实现WebMVCConfigure接口。(配置信息,建议存放在项目的config结构下)

//将自定义的拦截器进行注册

default void addInterceptors(InterceptorRegistry registry)

4.提示重定向次数过多,login.html页面无法打开。将浏览器cookie请除,再将浏览器设置为初始设置

请求头传递token

前端但凡访问受限资源,都必须携带token发送请求;token可以通过请求行(params)、请求头(header)以及请求体data传递,但习惯性使用header传递

HttpServletRequest request

String token = request.getHeader("token")

axios通过请求头

当前端发送的请求携带自定义的请求头时,前端会发送一个预检请求(method=“OPTIONS”,初始值),后端需要正常响应前端,之后前端才会返回数据给后端

在拦截器中放行options请求

Java实践项目 - 用户登录的更多相关文章

  1. Java入门:用户登录与注册模块1(实践项目)——分析

    任务描述:用户登录与注册是大多数软件都拥有的一个模块.请编写一个控制台程序,实现用户的登录与注册功能,并且用户能够修改自己信息. [需求分析]由于本程序是一个演示程序,用户的信息我们做简化处理,仅包括 ...

  2. Intellij IDEA 构建Spring Web项目 — 用户登录功能

    相关软件: 1.Intellij IDEA14:http://pan.baidu.com/s/1nu16VyD 2.JDK7:http://pan.baidu.com/s/1dEstJ5f 3.Tom ...

  3. 学习记录 java session保存用户登录

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. DRF 商城项目 - 用户( 登录, 注册,登出,个人中心 ) 逻辑梳理

    用户登录 自定义用户登录字段处理 用户的登录时通过 手机号也可以进行登录 需要重写登录验证逻辑 from django.contrib.auth.backends import ModelBacken ...

  5. java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1 (55)

    实现不同的用户登录以后可以看到不同的菜单.(后台可以实现对用户菜单的管理.) 第一步:分析数据结构        1:用户表 表名:users 列名 类型 说明 id Varchar(32) 主键 n ...

  6. Java Web实现用户登录界面

    一.学习Java Web需要的技术: Java语言基础:算法基础.常用数据结构.编程规范. 掌握常见的数据结构和实用算法:培养良好的编程习惯. Java面向对象:封装.继承.多态等,面向对象程序设计, ...

  7. Java Web实现用户登录功能

    java web 学习记录一下 mvc结构实现mysql 连接 什么是mvc MVC是模型(model).视图(view).控制(controller)这三个单词上的首字母组成.它是一种应用模型,它的 ...

  8. Java简单示例-用户登录、单个页面的增删改查及简单分页

    index.html  -登录->stulist.jsp (index.html传递到LoginServlet,进行登录检测及写入session,NO返回index.html界面,OK 跳转到s ...

  9. 36 Flutter仿京东商城项目 用户登录 退出登录 事件广播更新状态

    Login.dart import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.da ...

  10. vue项目用户登录状态管理,vuex+localStorage实现

    安装vuex cnpm install vuex --save-dev

随机推荐

  1. 通过nc获取靶机的反弹Shell [靶机实战]

    1.环境 Kali:172.30.1.3/24 靶机(Funbox9):172.30.1.129/24 2.信息收集 通过nmap扫描此主机,我们需要获取到开放的端口以及服务的Banner 1 nma ...

  2. MYSQL数据库的创建和删除

    打开Windows命令行,输入登录用户和密码 mysql -h localhost -u root -p 创建新数据 CREATE DATABASE zoo; 查看系统中的数据库 SHOW DATAB ...

  3. 关于Pod中进程在节点中的研究

    最近研究OpenShift virtulization, 各种Pod对KVM进程的封装,引发了Pod中进程到底在Node中是什么表现形势的好奇,因为对基础知识的不扎实,还是希望找个环境能仔细看看,建立 ...

  4. C++面试八股文:了解位运算吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第12面: 面试官:了解位运算吗? 二师兄:了解一些.(我很熟悉) 面试官:请列举以下有哪些位运算? 二师兄:按位与(&).按位或(|).按位 ...

  5. vivo 游戏黑产反作弊实践

    作者:vivo 互联网安全团队 - Cai Yifan 在数字化.移动化的浪潮下,游戏产业迅速发展,尤其疫情过后许多游戏公司业务迎来新的增长点. 游戏行业从端游开始一直是黑灰产活跃的重要场景.近年来, ...

  6. 02-面试必会-SSM框架篇

    01-什么是 Spring IOC 和 DI ? IOC : 控制翻转 , 它把传统上由程序代码直接操控的对象的调用权交给容 器,通过容器来实现对象组件的装配和管理.所谓的"控制反转&quo ...

  7. 数据库中的可视化和探索性:MongoDB的数据可视化和探索性工具

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...

  8. 让IIS支持.NET Web Api PUT和DELETE请求

    前言 有很长一段时间没有使用过IIS来托管应用了,今天用IIS来托管一个比较老的.NET Fx4.6的项目.发布到线上后居然一直调用不同本地却一直是正常的,关键是POST和GET请求都是正常的,只有P ...

  9. 数据库连接池之c3p0-0.9.1.2,16年的古董,发生连接泄露怎么查(一)

    背景 这篇文章是写给有缘人的,为什么这么说呢,因为本篇主要讲讲数据库连接池之c3p0-0.9.1.2版本. 年轻的朋友,可能没怎么听过c3p0了,或者也仅限于听说,这都很正常,因为c3p0算是200几 ...

  10. 说说 Linux 的 curl 命令

    cURL,熟悉 Linux 的同学,没有人不知道这个命令吧:) 它有非常非常多的参数,我这里就不复制粘贴了,有需要可以 -h 或者谷歌搜索看看. 我从实用性的角度,说下我比较常用的几个参数: -v:啰 ...