Java实践项目 - 用户登录
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实践项目 - 用户登录的更多相关文章
- Java入门:用户登录与注册模块1(实践项目)——分析
任务描述:用户登录与注册是大多数软件都拥有的一个模块.请编写一个控制台程序,实现用户的登录与注册功能,并且用户能够修改自己信息. [需求分析]由于本程序是一个演示程序,用户的信息我们做简化处理,仅包括 ...
- Intellij IDEA 构建Spring Web项目 — 用户登录功能
相关软件: 1.Intellij IDEA14:http://pan.baidu.com/s/1nu16VyD 2.JDK7:http://pan.baidu.com/s/1dEstJ5f 3.Tom ...
- 学习记录 java session保存用户登录
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- DRF 商城项目 - 用户( 登录, 注册,登出,个人中心 ) 逻辑梳理
用户登录 自定义用户登录字段处理 用户的登录时通过 手机号也可以进行登录 需要重写登录验证逻辑 from django.contrib.auth.backends import ModelBacken ...
- java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1 (55)
实现不同的用户登录以后可以看到不同的菜单.(后台可以实现对用户菜单的管理.) 第一步:分析数据结构 1:用户表 表名:users 列名 类型 说明 id Varchar(32) 主键 n ...
- Java Web实现用户登录界面
一.学习Java Web需要的技术: Java语言基础:算法基础.常用数据结构.编程规范. 掌握常见的数据结构和实用算法:培养良好的编程习惯. Java面向对象:封装.继承.多态等,面向对象程序设计, ...
- Java Web实现用户登录功能
java web 学习记录一下 mvc结构实现mysql 连接 什么是mvc MVC是模型(model).视图(view).控制(controller)这三个单词上的首字母组成.它是一种应用模型,它的 ...
- Java简单示例-用户登录、单个页面的增删改查及简单分页
index.html -登录->stulist.jsp (index.html传递到LoginServlet,进行登录检测及写入session,NO返回index.html界面,OK 跳转到s ...
- 36 Flutter仿京东商城项目 用户登录 退出登录 事件广播更新状态
Login.dart import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.da ...
- vue项目用户登录状态管理,vuex+localStorage实现
安装vuex cnpm install vuex --save-dev
随机推荐
- 分布式机器学习(Parameter Server)
分布式机器学习中,参数服务器(Parameter Server)用于管理和共享模型参数,其基本思想是将模型参数存储在一个或多个中央服务器上,并通过网络将这些参数共享给参与训练的各个计算节点.每个计算节 ...
- 如何科学地利用MTTR优化软件交付流程?
谷歌提出的衡量 DevOps 质量的 DORA 指标让 MTTR(平均恢复时间) 名声大振.在本文中,你将了解到 MTTR 的作用.为什么它对行业研究很有用.你可能被它误导的原因以及如何避免 MTTR ...
- 为 Windows 系统替换优雅的苹果字体
使用 Windows 的童鞋,大家估计都用惯了默认的微软雅黑字体,字体本身也很不错,但使用久了也该换个别的字体了,换个字体换个心情嘛. 今天给大家推荐一款非常棒的一键更换 Windows 系统字体的软 ...
- Java拓展-拆,装箱,线程,反射
导言: 在学习JavaSE的时候,我们会使用Java基础编程,并且了解了什么是面向对象的编程,会使用Java写一些基础算法程序, 接下来,我们需要了解Java的自动拆箱和自动装箱,单线程和多线程,反射 ...
- PQ常用模板
//json请求 Json.Document(Web.Contents("",[Headers=[#"cookie"=tk,#"Content-Typ ...
- 对象存储?CRUD Boy实现对文件的增删改查
大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 以下是正文! 对象存储是什么? 对象存储是一种数据 ...
- TiDB简介与应用场景
引言 在当今互联网时代,数据的规模和复杂性不断增长,传统关系型数据库面临着无法满足高并发和大规模数据存储需求的挑战.为了解决这一问题,开源社区涌现出了一系列分布式数据库解决方案,其中TiDB作为一种新 ...
- GPT3的性能评估:比较不同语言、文本和任务的差异
目录 GPT-3 性能评估:比较不同语言.文本和任务的差异 近年来,自然语言处理 (NLP) 和人工智能领域取得了巨大的进展,其中 GPT-3 是目前最为先进的语言模型之一.GPT-3 拥有超过 17 ...
- ASP.NET Core 6框架揭秘实例演示[42]:检查应用的健康状况
现代化的应用及服务的部署场景主要体现在集群化.微服务和容器化,这一切都建立在针对部署应用或者服务的健康检查上.ASP.NET提供的健康检查不仅可能确定目标应用或者服务的可用性,还具有健康报告发布功能. ...
- 在无桌面系统的树莓派上运行QT GUI程序
背景:需要做一个干净整洁一点的系统来运行一个QT GUI程序. 准备树莓派4B 树莓派的版本为Raspbian GNU/Linux 10 (buster),无桌面系统,制作系统盘的工具为:https: ...