Java项目——瑞吉外卖笔记

2024-04-11 18:20
文章标签 java 项目 笔记 外卖 瑞吉

本文主要是介绍Java项目——瑞吉外卖笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

hello,你好鸭,我是Ethan,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!💪💪💪
目前博客主要更新Java系列、数据库、项目案例、计算机基础等知识点。感谢你的阅读和关注,在记录的同时希望我的博客能帮助到更多人。✔️✔️✔️
人生之败,非傲即惰,二者必居其一,勤则百弊皆除。你所坚持最终会回报你!加油呀!🏃🏃🏃

文章目录

  • 写在前面——
  • Day01业务开发
    • 一、项目总体介绍与展示
    • 二、软件开发整体介绍
      • (一)软件开发流程
      • (二)角色分工
      • (三)软件环境
    • 三、瑞吉外卖项目介绍
      • (一)项目介绍
      • (二)产品原型展示
      • (三)技术选型功能架构
        • 1.技术选型——
        • 2.功能架构——
      • (四)角色
    • 四、开发环境搭建
      • (一)数据库环境搭建
      • (二)maven项目搭建
        • 1.项目搭建完成后的注意事项,好习惯
        • 2.在idea中连接数据库时连接不上解决方案:
        • 3.Log监控日志监控系统
        • 4.添加静态访问资源
    • 五、后台登录功能开发
      • (一)需求分析
        • 1.点击登录按钮之后发生的事情——
        • 2.浏览器F12进入追踪服务
        • 3.整体流程梳理如下——>
        • 4.code、data、meg信息
      • (二)代码开发
        • 1.创建实体类Employee,和employee表进行映射
        • 2.编写controller层
        • 3.导入通用返回结果类
        • 4.controller具体实现
        • 5.加密算法与登录全流程
    • 六、后台退出功能开发
      • (一)需求分析
      • (二)代码开发
      • (三)功能测试
      • (四)分析后台系统首页构成和效果展示方式
  • Day02员工管理业务开发
    • 一、完善登录功能
      • (一)问题分析——
      • (二)代码实现
        • 1.创建自定义过滤器LoginCheckFilter
        • 2.在启动类上加入注解@Servletcomponentscan
        • 3.完善过滤器的处理逻辑
      • (三)功能测试
    • 二、新增员工
      • (一)需求分析
      • (二)数据模型
      • (三)代码开发
      • (四)功能测试
        • 1.整体代码
        • 2.完善补充:账号唯一性判断
        • 3.报错细化
        • 4.本节总结
    • 三、员工信息分页查询
      • (一)需求分析
      • (二)代码开发
        • 1.前端页面发送ajax请求,将分页查询参数 提交到服务端
        • 2、服务端Controller接收页面提交的数据并调用Service查询数据
          • 1.配置MP的分页查询插件
          • 2.测试能否正常封装
        • 3.编写queryWrapper查询
      • (三)功能测试
        • 1.分页查询
    • 四、启用/禁用员工账号显示不同
      • (一)需求分析
        • 管理员——
        • 普通员工——
      • (二)代码开发
      • (三)功能测试
      • (四)代码修复
        • 1.问题描述
        • 2.具体修复步骤
          • 1.自定义的全局转化器
          • 2.在MVC配置文件中追加上面的自定义的全局转化器
    • 五、编辑员工信息
      • (一)需求分析
      • (二)代码开发
      • (三)功能测试
  • Day03分类管理业务开发
    • 一、公共字段自动填充
      • (一)需求分析
      • (二)代码开发
      • (三)功能测试
      • (四)功能完善
        • (1)目前问题——createTime和UpdateTime是固定值,应该设置为动态值
        • (2)解决方案——threadlocal类解决
        • (3)threadlocal知识补充
        • (4)什么是Threadlocal——Thread的局部变量
        • (5)代码流程
    • 二、新增分类
      • (一)需求分析
      • (二)代码开发
        • 1.框架开发——
        • 2.具体开发——
      • (三)功能测试
    • 三、分类信息分页查询
      • (一)需求分析
      • (二)代码开发
      • (三)功能测试
      • (四)功能完善
    • 四、删除分类
      • (一)需求分析
      • (二)代码开发
    • 网站URL路径中“#”“?”“&”号的作用是什么
      • (三)功能测试
      • (四)功能完善
    • 五、修改分类
      • (一)需求分析
      • (二)代码开发
      • (三)功能测试
      • (四)功能完善
  • Day04菜品管理业务开发
    • 一、文件上传下载
      • 文件上传功能讲解
        • 客户端——
        • 服务端——
      • (一)需求分析
      • (二)代码开发
      • 1.文件上传
        • (1)先在配置文件里面指定保存位置
        • (2)代码编写
      • 2.文件下载
      • (三)功能测试
      • (四)功能完善
  • !!!编程小技巧——
        • (1)快速将光标移动至行尾、行头
        • (2)Alt+数字
    • 二、新增菜品
      • (一)需求分析
      • (二)代码开发
        • 1.框架开发——5层结构
        • 2.代码开发——
          • 1.下拉框开发
          • 2.文件上传下载开发。复用前面的(上传下载)接口
      • (三)功能测试
      • (四)功能完善
    • 三、菜品信息分页查询
    • 四、修改菜品
  • Day05手机验证码登录
    • 一、短信发送
      • (一)短信服务介绍
      • (二)[阿里云短信服务](https://help.aliyun.com/zh/sms/getting-started/get-started-with-sms)
      • (三)代码开发
    • 二、手机验证码登录
      • (一)需求分析
      • (二)数据模型
      • (三)代码开发
        • 1.过滤器修改
          • (1)添加静态路径
          • (2)添加判断用户是否登录模块
        • 2.发送验证码
        • 3.验证过程
      • (四)功能测试
  • !!!编程小技巧
        • (1)快速展开所有代码包
        • (2)替换
  • Day06菜品展示、购物车、下单
    • 一、导入用户地址簿
      • (一)需求分析
      • (二)代码开发
      • (三)导入功能代码
      • (四)功能完善
  • Day07Git
    • 模版
      • (一)需求分析
      • (二)代码开发
      • (三)功能测试
      • (四)功能完善

写在前面——

需要掌握:

Java基础知识
Java Web
MySQL
Spring Boot
SSM (Spring、Spring MVC、MyBatis)
Maven

学完后会掌握——

了解企业项目开发的完整流程,增长开发经验

了解需求分析的过程,提高分析和设计能力对所学技术进行灵活应用,提高编码能力

解决各种异常情况,提高代码调试能力

Day01业务开发

一、项目总体介绍与展示

1.移动端与管理后台展示
在这里插入图片描述
2.项目上线后
在这里插入图片描述

3.管理后台登录
在这里插入图片描述

4.管理后台详细页面
在这里插入图片描述

二、软件开发整体介绍

(一)软件开发流程

在这里插入图片描述

(二)角色分工

在这里插入图片描述

(三)软件环境

在这里插入图片描述

三、瑞吉外卖项目介绍

(一)项目介绍

在这里插入图片描述
两端应用
在这里插入图片描述

(二)产品原型展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(三)技术选型功能架构

1.技术选型——

2.功能架构——

在这里插入图片描述

(四)角色

在这里插入图片描述

四、开发环境搭建

(一)数据库环境搭建

在这里插入图片描述

(二)maven项目搭建

1.项目搭建完成后的注意事项,好习惯

在这里插入图片描述

2.在idea中连接数据库时连接不上解决方案:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.Log监控日志监控系统

在这里插入图片描述
在这里插入图片描述

4.添加静态访问资源

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

注意项目结构 ——配置类要在启动类同包或者子包下(包就是文件夹)

五、后台登录功能开发

(一)需求分析

1.点击登录按钮之后发生的事情——

在这里插入图片描述

2.浏览器F12进入追踪服务

在这里插入图片描述

在这里插入图片描述
注意这里的登录使用的是数据库中的员工表

3.整体流程梳理如下——>

在这里插入图片描述

为什么点击了登录按钮会转发请求到后端路径/employee/login?
在这里插入图片描述
在这里插入图片描述

4.code、data、meg信息

在这里插入图片描述

(二)代码开发

1.创建实体类Employee,和employee表进行映射

1.MP的智能命名映射
在这里插入图片描述

2.编写controller层

使用final+@RequiredArgsconstructor注入
在这里插入图片描述

3.导入通用返回结果类

通用返回结果,服务端响应的数据最终都会封装成此对象
在这里插入图片描述
在这里插入图片描述

黑马点评的结果集类对比
在这里插入图片描述
在这里插入图片描述

4.controller具体实现

在这里插入图片描述

5.加密算法与登录全流程

在这里插入图片描述

在这里插入图片描述

查看缓存在浏览器里面的信息——
在这里插入图片描述

六、后台退出功能开发

(一)需求分析

在这里插入图片描述
在这里插入图片描述

(二)代码开发

根据点击前端的按钮发出的信息开发后端代码
在这里插入图片描述

在这里插入图片描述

(三)功能测试

在这里插入图片描述

(四)分析后台系统首页构成和效果展示方式

在这里插入图片描述

在这里插入图片描述

Day02员工管理业务开发

本章内容介绍

新增员工
员工信息分页查询
启用/禁用员工账号
编辑员工信息
在这里插入图片描述
在这里插入图片描述

一、完善登录功能

(一)问题分析——

前面我们已经完成了后台系统的员工登录功能开发,但是还存在一个问题:用户如果不登录,直接访问系统首页面,照样可以正常访问
这种设计并不合理,我们希望看到的效果应该是,只有登录成功后才可以访问系统中的页面,如果没有登录则跳转到登录页面.----
那么,具体应该怎么实现呢?

答案就是使用过滤器或者拦截器在过滤器或者拦截器中判断用户是否已经完成登录,如果没有登录则跳转到登录页面
在这里插入图片描述

(二)代码实现

在这里插入图片描述

1.创建自定义过滤器LoginCheckFilter

过滤器的作用与必要性
在这里插入图片描述
请求的顺序及层次
在这里插入图片描述

在这里插入图片描述

2.在启动类上加入注解@Servletcomponentscan

在这里插入图片描述
在这里插入图片描述

3.完善过滤器的处理逻辑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前端根据后端的信息判断是否展示数据
在这里插入图片描述
在这里插入图片描述

(三)功能测试

在这里插入图片描述
在这里插入图片描述

二、新增员工

(一)需求分析

在这里插入图片描述

(二)数据模型

在这里插入图片描述

(三)代码开发

在这里插入图片描述
在这里插入图片描述

前台的表单未传入实体类中的的数据,需要后台手动设置
在这里插入图片描述

总体代码:
在这里插入图片描述

(四)功能测试

1.整体代码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.完善补充:账号唯一性判断

在这里插入图片描述
在这里插入图片描述

在此添加相同账号后
在这里插入图片描述

在这里插入图片描述

3.报错细化

在这里插入图片描述
在这里插入图片描述

4.本节总结

在这里插入图片描述

三、员工信息分页查询

(一)需求分析

在这里插入图片描述

(二)代码开发

1.前端页面发送ajax请求,将分页查询参数 提交到服务端

在这里插入图片描述
在这里插入图片描述
细化分析效果——
在这里插入图片描述
在这里插入图片描述

JS文件
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、服务端Controller接收页面提交的数据并调用Service查询数据
1.配置MP的分页查询插件

注意@bean将mp加入Spring管理。MP大大简化了分页查询代码量
分页查询

2.测试能否正常封装

在这里插入图片描述

3.编写queryWrapper查询

在这里插入图片描述

(三)功能测试

在这里插入图片描述
在这里插入图片描述

1.分页查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、启用/禁用员工账号显示不同

(一)需求分析

管理员——

在这里插入图片描述

普通员工——

在这里插入图片描述

前端页面禁用启用按钮实现分析
在这里插入图片描述

在这里插入图片描述

(二)代码开发

后端流程梳理
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(三)功能测试

运行时发现错误
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(四)代码修复

1.问题描述

在这里插入图片描述

2.具体修复步骤

在这里插入图片描述

1.自定义的全局转化器

在这里插入图片描述

2.在MVC配置文件中追加上面的自定义的全局转化器

在这里插入图片描述

重新启动后,一切都可以了——

在这里插入图片描述

五、编辑员工信息

(一)需求分析

在这里插入图片描述

(二)代码开发

在这里插入图片描述

在这里插入图片描述

上面的getByID方法是将数据库里面的数据填充到编辑栏里面,如下——
在这里插入图片描述

在这里插入图片描述

注意上面图片中的注意

(三)功能测试

Day03分类管理业务开发

本章内容

公共字段自动填充
新增分类
分类信息分页查询
删除分类
修改分类
在这里插入图片描述

一、公共字段自动填充

(一)需求分析

在这里插入图片描述
在这里插入图片描述

(二)代码开发

在这里插入图片描述
在这里插入图片描述

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {log.info("公共字段自动填充[insert]++++++");log.info(metaObject.toString());metaObject.setValue("createTime", LocalDateTime.now());metaObject.setValue("updateTime", LocalDateTime.now());metaObject.setValue("createUser", new Long(1));metaObject.setValue("updateUser", new Long(1));}@Overridepublic void updateFill(MetaObject metaObject) {log.info("公共字段自动填充[update]++++++");log.info(metaObject.toString());metaObject.setValue("createTime", LocalDateTime.now());metaObject.setValue("updateTime", LocalDateTime.now());metaObject.setValue("createUser", new Long(1));metaObject.setValue("updateUser", new Long(1));}
}

(三)功能测试

在这里插入图片描述

(四)功能完善

(1)目前问题——createTime和UpdateTime是固定值,应该设置为动态值

在这里插入图片描述

(2)解决方案——threadlocal类解决

在这里插入图片描述

(3)threadlocal知识补充

更多ThreadLocal的知识请点击这里
在这里插入图片描述

(4)什么是Threadlocal——Thread的局部变量

在这里插入图片描述

(5)代码流程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、新增分类

(一)需求分析

在这里插入图片描述
加入category表,重点字段type
在这里插入图片描述

(二)代码开发

1.框架开发——

在这里插入图片描述
在这里插入图片描述
注意上面少了一个@Mapper注解
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.具体开发——

在这里插入图片描述

在这里插入图片描述

(三)功能测试

在这里插入图片描述

三、分类信息分页查询

(一)需求分析

在这里插入图片描述

(二)代码开发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(三)功能测试

在这里插入图片描述

(四)功能完善

四、删除分类

(一)需求分析

注意事项
在这里插入图片描述

(二)代码开发

在这里插入图片描述

在这里插入图片描述
有?&之类

网站URL路径中“#”“?”“&”号的作用是什么

?路径后面连接参数
&不同参数连接符

   @DeleteMapping()public R<String> deleteById( long ids){log.info("根据ID删除菜品信息++++++++,ID为{}",ids);iCategoryService.removeById(ids);return R.success("删除菜品成功");}
}

(三)功能测试

在这里插入图片描述

(四)功能完善

在这里插入图片描述
super的深入使用


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、修改分类

(一)需求分析

(二)代码开发

(三)功能测试

(四)功能完善

Day04菜品管理业务开发

管理端——
在这里插入图片描述
客户端——
在这里插入图片描述

一、文件上传下载

文件上传功能讲解

客户端——

在这里插入图片描述

elementUI 现成的组件
在这里插入图片描述

服务端——

本质是对流进行操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(一)需求分析

(二)代码开发

1.文件上传

在这里插入图片描述
注意这里的file是临时文件.temp,过后就自动删除了,必须指定转存到指定目录永久保存才行

(1)先在配置文件里面指定保存位置

在这里插入图片描述

(2)代码编写

在这里插入图片描述

2.文件下载

原理——
浏览器发送请求到服务端,服务端再根据请求将资源以的形式写出,展示到浏览器页面

在这里插入图片描述
在这里插入图片描述

(三)功能测试

如下,文件下载成功回显至浏览器
在这里插入图片描述

(四)功能完善

!!!编程小技巧——

(1)快速将光标移动至行尾、行头

在这里插入图片描述

(2)Alt+数字

在这里插入图片描述

二、新增菜品

(一)需求分析

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(二)代码开发

1.框架开发——5层结构

在这里插入图片描述
entity层
在这里插入图片描述

Mapper层
在这里插入图片描述

Service接口层
在这里插入图片描述

Service实现层
在这里插入图片描述
Controller层
在这里插入图片描述

2.代码开发——

前端页面与服务端交互过程
在这里插入图片描述

1.下拉框开发

页面(backend/page/food/add.html)发送ajax请求,请求服务端获取菜品分类数据并展示到下拉框
在这里插入图片描述

点击上述按钮之后解析的代码

在这里插入图片描述

此处获取后端接口,参数可以是type或者Category
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.文件上传下载开发。复用前面的(上传下载)接口

在这里插入图片描述

(三)功能测试

(四)功能完善

三、菜品信息分页查询

四、修改菜品

Day05手机验证码登录

01短信发送
02手机验证码登录
在这里插入图片描述

一、短信发送

(一)短信服务介绍

目前市面上有很多第三方提供的短信服务,这些第三方短信服务会和各个运营商(移动、联通、电信)对接,我们只需要注册成为会员并且按照提供的开发文档进行调用就可以发送短信。需要说明的是,这些短信服务一般都是收费服务
常用短信服务:阿里云、华为云、腾讯云

(二)阿里云短信服务

在这里插入图片描述
签名即类似【XXX】
在这里插入图片描述
在这里插入图片描述

(三)代码开发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
短信验证码发送开发:

package com.itheima.reggie.utils;import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;/*** 短信发送工具类*/
public class SMSUtils {/*** 发送短信* @param signName 签名* @param templateCode 模板* @param phoneNumbers 手机号* @param param 参数*/public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");IAcsClient client = new DefaultAcsClient(profile);SendSmsRequest request = new SendSmsRequest();request.setSysRegionId("cn-hangzhou");request.setPhoneNumbers(phoneNumbers);request.setSignName(signName);request.setTemplateCode(templateCode);request.setTemplateParam("{\"code\":\""+param+"\"}");try {SendSmsResponse response = client.getAcsResponse(request);System.out.println("短信发送成功");}catch (ClientException e) {e.printStackTrace();}}}

二、手机验证码登录

(一)需求分析

(二)数据模型

登录时自动完成注册。先验证是否在表里面,不在就自动注册。
在这里插入图片描述

(三)代码开发

1.前后端交互梳理
在这里插入图片描述

2.流程梳理
在这里插入图片描述
3.实际开发

1.过滤器修改
(1)添加静态路径

在这里插入图片描述

(2)添加判断用户是否登录模块

依照前面开发的后台人员登录判断
后台人员端
在这里插入图片描述
用户端
在这里插入图片描述

2.发送验证码
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@Autowiredprivate UserService userService;/**//    明确短信验证码登录的根本————最终是要前端和后端的验证码一致即可。
//    阿里短信发送只是中介,
//    为了方便并直入主题,这里直接在发送后到后端偷偷看一下填回即可*/@PostMapping("/sendMsg")public R<String> sendMsg(@RequestBody User user, HttpServletRequest httpServletRequest){//获取手机号String phone = user.getPhone();if(StringUtils.isNotEmpty(phone)){//生成随机的4位验证码String code = ValidateCodeUtils.generateValidateCode(4).toString();log.info("code={}",code);//调用阿里云提供的短信服务API完成发送短信//SMSUtils.sendMessage("瑞吉外卖","",phone,code);//需要将生成的验证码保存到SessionhttpServletRequest.getSession().setAttribute(phone,code);return R.success("手机验证码短信发送成功");}return R.error("短信发送失败");}

在这里插入图片描述

3.验证过程

填写完验证码后,直接登录即可。
下面是验证过程

    /*** 移动端用户登录* @param map* @param session* @return*/@PostMapping("/login")public R<User> login(@RequestBody Map map, HttpSession session){log.info(map.toString());//1.获取页面提交的手机号String phone = map.get("phone").toString();//2.获取页面提交的验证码String code = map.get("code").toString();//从Session中获取保存的验证码(一定是正确的)Object codeInSession = session.getAttribute(phone);//进行验证码的比对(页面提交的验证码和Session中保存的验证码比对)if(codeInSession != null && codeInSession.equals(code)){//如果能够比对成功,说明登录成功LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(User::getPhone,phone);User user = userService.getOne(queryWrapper);if(user == null){//判断当前手机号对应的用户是否为新用户(是否能在表中找到User),如果是新用户就自动完成注册user = new User();user.setPhone(phone);user.setStatus(1);userService.save(user);}session.setAttribute("user",user.getId());return R.success(user);}return R.error("登录失败");}
}

在这里插入图片描述

(四)功能测试

点击了发送验证码后,没有请求是为什么?

在这里插入图片描述

!!!编程小技巧

(1)快速展开所有代码包

你可以选中你要展开的项目或者包,按下键盘的→方向键,按住不放就会给你全部展开

(2)替换

全局:ctrl + shift + r: 在路径中替换,指的是在选定的目录下或者类包下,查找要被替换的字符。
当前文件内容:ctrl + r: 当前文件内容替换,指的是在当前打开的文件中替换匹配的字符,只操作一个文件。

Day06菜品展示、购物车、下单

在这里插入图片描述

一、导入用户地址簿

(一)需求分析

在这里插入图片描述

数据模型
在这里插入图片描述

(二)代码开发

(三)导入功能代码

(四)功能完善

Day07Git

在这里插入图片描述
在这里插入图片描述

模版

(一)需求分析

(二)代码开发

(三)功能测试

(四)功能完善

📣推荐阅读
Java面试总结:点击进入 Java面试专栏 关注走一波
Java基础知识:点击进入 Java基础总结 关注走一波
Java项目专栏:点击进入 Java项目专栏 关注走一波

📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤ 分享👥 留言💬thanks!!!
📚愿大家都能学有所得,功不唐捐!

这篇关于Java项目——瑞吉外卖笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/894831

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p