黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(5)登录认证

 指路(1)(2)(3)(4)👇

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理_tlias智能学习辅助系统的需求分析-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/YOYU_/article/details/135476566黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(2)员工管理|分页查询、分页查询(带条件)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/YOYU_/article/details/135491233黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(3)员工管理|新增员工、文件上传-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/YOYU_/article/details/135513546

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(4)员工管理|修改员工、配置文件-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/YOYU_/article/details/135535512

一、登录功能

代码编写:

登录操作的核心逻辑就是按照用户名和密码查询数据库中的内容,如果有则登录成功,如果没有则返回错误信息。

结果展示:

前后端联调:

二、登录校验

1.会话技术

  • 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。
  • 会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据
  • 会话跟踪方案:
  1. 客户端会话跟踪技术:Cookie

    1. HTTP - 标题 | Headers - 开发者手册 - 腾讯云开发者社区-腾讯云 (tencent.com)
    2. 核心:响应头(Set-Cookie: name=value)设置Cookie的数据,请求头(Cookie:name=value)用来携带Cookie的数据。
    3. 优点:HTTP协议中支持的技术
    4. 缺点:
      1. 移动端APP无法使用Cookie;
      2. 不安全,用户可以自己禁用Cookie;
      3. Cookie不能跨域。(跨域区分三个维度:协议、IP/域名、端口号)
  2. 服务端会话跟踪技术:Session

    1. 底层:基于Cookie实现的
    2. 响应头(Set-Cookie: JSESSIONID=1)设置Cookie的数据,请求头(Cookie:JSESSIONID=1)用来携带Cookie的数据。
    3. 优点:存储在服务器,安全
    4. 缺点:
      1. 服务器集群环境下无法直接使用Session;
      2. Cookie的缺点。
  3. 令牌技术

    1. 缺点:需要自己实现
    2. 优点:
      1. 支持PC端、移动端;
      2. 解决集群环境下的认证问题;
      3. 减轻服务器存储压力。

2.JWT令牌

JWT:JSON Web Token

定义了一种简洁、自包含的格式,用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在,这些信息是可靠的。

JSON Web Tokens - jwt.io

Base64 编码/解码 | 菜鸟工具 (runoob.com)

JWT令牌生成

//    生成JWT@Testpublic void testGenJwt(){Map<String, Object> claims = new HashMap<>();claims.put("id", 1);claims.put("name", "tom");String jwt = Jwts.builder().signWith(SignatureAlgorithm.HS256, "itheima")//签名算法.setClaims(claims)//自定义内容(载荷).setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))//设置有效期为一个小时.compact();System.out.println(jwt);}

JWT令牌解析

//    解析JWT@Testpublic void testParseJwt(){Claims claim = Jwts.parser().setSigningKey("itheima")//指定签名密钥.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTcwNTA3MjY3NH0.Yvw1YNjqip8ysiFnKavbaszCMo4zgqjFymwnK15nIJI").getBody();//解析令牌System.out.println(claim);}
}

结果展示:

前后端联调:

F12抓取数据

前端在后续的每一次请求都会携带令牌到服务端

3.过滤器Filter

  • 概念:是JavaWeb三大组件(Servlet, Filter, Listener)之一;
  • 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能;
  • 过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。

Q:放行后访问对应资源,资源访问完成后,还会回到Filter中吗?会

       如果回到Filter中,是重新执行还是执行放行后的逻辑呢?执行放行后的逻辑

@ServletComponentScan:在启动类上增加该注解,引入Filter过滤器

代码展示:

package com.itheima.filter;import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.BoundSqlInterceptor;
import com.github.pagehelper.util.StringUtil;
import com.itheima.pojo.Result;
import com.itheima.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** ClassName: LoginCheckFilter* Package: com.itheima.filter*/
@Slf4j
@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//强转为httpHttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;//1.获取请求urlString url = req.getRequestURL().toString();log.info("请求的url:{}", url);//2.判断请求url中是否包含login,如果包含,说明是登录操作,放行if (url.contains("login")){log.info("登录操作,放行……");chain.doFilter(request, response);return;}//3.获取请求头的令牌(token)String jwt = req.getHeader("token");//4.判断令牌是否存在,如果不存在,返回错误结果(未登录)if (!StringUtils.hasLength(jwt)){log.info("请求头token为空,返回未登录的信息");Result error = Result.error("NOT_LOGIN");//手动转换 对象--》json---》阿里巴巴fastJSON工具包String notlogin = JSONObject.toJSONString(error);resp.getWriter().write(notlogin);return;}//5.判断token,如果解析失败,返回错误结果(未登录)try {JwtUtils.parseJWT(jwt);} catch (Exception e) {//jwt令牌解析失败e.printStackTrace();log.info("解析令牌失败,返回未登录的错误信息");Result error = Result.error("NOT_LOGIN");//手动转换 对象--》json---》阿里巴巴fastJSON工具包String notlogin = JSONObject.toJSONString(error);resp.getWriter().write(notlogin);return;}//6.放行log.info("令牌合法,放行");chain.doFilter(request, response);}
}

拦截结果:

登录请求,直接放行

正确的jwt令牌,查询成功

错误的令牌,解析错误,返回json错误信息

4.拦截器Interceptor

  • 概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行。
  • 作用:拦截请求,在指定的方法调用前后,根据业务需要执行预先设定的代码。

【Filter与Interceptor区别】

  • 接口规范不同:过滤器需要实现Filter接口,而拦截器需要实现HandlerInterceptor接口;
  • 拦截范围不同:过滤器Filter会拦截所有的资源,而Interceptor只会拦截Spring环境中的资源;
  • 放行代码不同:Filter需要用调用doFilter方法,Interceptor只需要return true。

退出登录之后,直接复制部门管理链接是无法进入的,拦截需要再次登录。

三、异常处理

@RestControllerAdvice:在全局异常处理器上加

@ExceptionHandler:指定当前方法要捕获的是哪一类型的异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239045.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣hot100 二叉树中的最大路径和 递归

Problem: 124. 二叉树中的最大路径和 文章目录 解题方法复杂度&#x1f496; Code 解题方法 &#x1f468;‍&#x1f3eb; 参考思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f496; Code /*** Definition for a binary tree no…

教你用通义千问只要五步让千年的兵马俑跳上现代的科目三?

教你用五步让千年的兵马俑跳上现代的舞蹈科目三&#xff1f; 上面这个“科目三”的视频&#xff0c;只用了一张我上月去西安拍的兵马俑照片生成的。 使用通义千问&#xff0c;只要5步就能它舞动起来&#xff0c;跳上现在流行的“科目三”舞蹈。 全民舞王 第1步 打开通义千问…

js 回文串

思路&#xff1a; 判断一个字符串是否为回文字符串的基本思路是比较字符串的正序和倒序是否相同。 两者相同&#xff0c;则该字符串是回文字符串&#xff0c;否则不是。 要实现这一思路&#xff0c;我们可以使用 JavaScript 字符串的一些方法。我是忽略了所有的空格和符号&…

【grpc】利用protobuf实现java或kotlin调用python脚本,含实现过程和全部代码

前言 在一些特殊场景中&#xff0c;我们可能需要使用java或者其他任意语言调用python脚本或sdk等。本文的需求衍生也不例外于此&#xff0c;python端有sdk&#xff0c;但只能在python中调用&#xff0c;于是就有了本文章。 常见的调用方式如jython、python提供http rest接口、…

DC电源模块在物联网设备中的关键作用

BOSHIDA DC电源模块在物联网设备中的关键作用 DC电源模块在物联网设备中发挥着关键作用。物联网设备通常需要稳定可靠的电源供应&#xff0c;以保证设备的正常运行。DC电源模块提供了相应的电压和电流输出&#xff0c;为物联网设备提供所需的电力。 具体来说&#xff0c;DC电…

解决英特尔无线网卡WiFi或者蓝牙突然消失问题

winR&#xff0c;输入“devmgmt.msc”&#xff0c;检查设备管理器中的无线网卡驱动是否安装好。 访问https://www.intel.cn/content/www/cn/zh/download/19351/windows-10-and-windows-11-wi-fi-drivers-for-intel-wireless-adapters.html下载对应系统版本的英特尔无线网卡WiFi…

创始人记|2023「年终总结」暨 WorkfineV6版本发布

大家好&#xff0c;我是Workfine黄坤&#xff0c;很高兴能够再次为大家进行分享。衷心感谢大家一直以来对我们的厚爱和支持。新的一年&#xff0c;祝愿大家财源滚滚&#xff0c;身体健康&#xff0c;阖家幸福。 这是我们创业的第七个年头&#xff0c;进入这一行也有整整十年。…

使用 Apache POI 更新/覆盖 特定的单元格

使用 Apache POI 更新特定的单元格 一. 需求二. 实现三. 效果 一. 需求 将以下表中第4行&#xff0c;第4列的单元格由“张宇”更新为“汤家凤”&#xff0c;并将更行后的结果写入新的Excel文件中&#xff1b; 二. 实现 使用Apache POI&#xff0c;可以精确定位到需要更改的单…

Resize:最近邻插值、双线性插值、双三次插值

Resize&#xff1a;最近邻插值、双线性插值、双三次插值 Opencv resize函数1. 最近邻插值&#xff08;INTER_NEAREST&#xff09;1.1 原理1.2 代码实例1.3 简单的代码复现1.4 特点 2. 双线性插值&#xff08;INTER_LINEAR&#xff09;&#xff08;默认值&#xff09;2.1 原理2.…

【React源码 - Diff算法】

介绍 在React学习中&#xff0c;Diff算法(协调算法)&#xff0c;想必我们并不陌生&#xff0c;简单来说就是一个对比新老节点寻找差异&#xff0c;然后找出最小的一个变化集&#xff0c;最后对这个最小变化集进行最小的DOM操作&#xff0c;本文将从源码来分析在React(17.0.2)中…

聚观早报 |一加Ace 3鸣沙金开售;地平线征程6将发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 1月16日消息 一加Ace 3鸣沙金开售 地平线征程6将发布 互动短剧《谍影成双》首曝PV 台积电发布四季度财报 保时捷…

kafka系列(二)

本章承接kafka一内容&#xff0c;文章在本人博客主页都有&#xff0c;可以自行点击浏览。 幂等性 请求执行多次&#xff0c;但执行的结果是一致的。 如果&#xff0c;某个系统是不具备幂等性的&#xff0c;如果用户重复提交了某个表格&#xff0c;就可能会造成不良影响。例如…

第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

助力工业焊缝质量检测,YOLOv7【tiny/l/x】不同系列参数模型开发构建工业焊接场景下钢材管道焊缝质量检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景&#xff0c;在我们前面的博文开发实践中也有一些相关的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a;《轻量级模型YOLOv5-Lite基于自己的数据集【焊接质量检测】从零构建模型超详细教程》 《基于DeepLabV3Plus…

反向代理的本质是什么?

反向代理是一种网络架构模式&#xff0c;通常用于提供静态内容、处理安全、负载均衡和缓存等任务。在这种架构中&#xff0c;客户端发送的请求首先到达反向代理服务器&#xff0c;然后由反向代理服务器将请求转发给后端的实际服务器。反向代理服务器可以处理和修改请求和响应&a…

20. 从零用Rust编写正反向代理,四层反向代理stream(tcp与udp)实现

wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器&#xff0c;四层TCP/UDP转发&#xff0c;内网穿透&#xff0c;后续将实现websocket代理等&#xff0c;会将实现过程分享出来&#xff0c;感兴趣的可以一起造个轮子 项目地址 gite: https:…

Linux 下GEO Server发布图层后,中文乱码解决方案

发布的图层&#xff0c;显示中文乱码&#xff0c;都是框框&#xff1a;如“口口” 第一步先查看Linux字符集 如下命令所示&#xff1a; 1.查看当前系统语言 echo $LANG2.查看安装的语言包 locale如果上面的命令执行后显示的是en_US.UTF-8&#xff0c;则说明当前语言系统及安…

创意交融:集成自定义报表和仪表盘设计器,实现图标替换

前言 在现代数据分析领域&#xff0c;随着对报表和数据分析的需求不断增长&#xff0c;市场上涌现了许多嵌入式报表工具。这些工具能够与企业现有的OA、ERP、MES、CRM等应用系统深度集成&#xff0c;实现对业务数据的自助式分析。然而&#xff0c;在实际应用中&#xff0c;不同…

实战 php 使用 wkhtmltopdf 生成pdf的全过程

公司里边有生成pdf报告的业务需求,之前有过尝试用tcpdf,直接生成的pdf的过程,但是pdf报告的内容数据,根据不同内容的变化,都是各种各样的bug,一直处理修修补补的状态,让后台开发人员很是头疼. 经过思索和甄选,总结出我们的业务中是由于样式不可控导致的,当时从逻辑上就思考到用…

QT quick基础:组件gridview

组件gridview与android中gridview布局效果相同。下面记录qt quick该组件的使用方法。 方法一&#xff1a; // ContactModel.qml import QtQuick 2.0ListModel {ListElement {name: "1"portrait: "icons/ic_find.png"}ListElement {name: "2"por…