手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!
权限控管理作为后台管理系统中必要的功能,mall 项目中结合 Spring Security 实现了基于路径的动态权限控制,可以对后台接口访问进行细粒度的控制,今天我们来讲下它的后端实现原理。
#👍 相关视频教程
权限模块数据库表解析open in new window
权限模块接口设计与实现_上篇open in new window
权限模块接口设计与实现_下篇open in new window
结合Spring Security实现接口的动态权限控制open in new window
#前置知识
学习本文需要一些Spring Security的知识,对Spring Security不太了解的朋友可以看下以下文章。
mall整合SpringSecurity和JWT实现认证和授权(一)
mall整合SpringSecurity和JWT实现认证和授权(二)
仅需四步,整合SpringSecurity+JWT实现登录认证 !
#数据库设计
权限管理相关表已经重新设计,将原来的权限拆分成了菜单和资源,菜单管理用于控制前端菜单的显示和隐藏,资源管理用来控制后端接口的访问权限。 ...
使用Redis+AOP优化权限管理功能,这波操作贼爽!
之前有很多朋友提过,mall 项目中的权限管理功能有性能问题,因为每次访问接口进行权限校验时都会从数据库中去查询用户信息。最近对这个问题进行了优化,通过 Redis+AOP 解决了该问题,下面来讲下我的优化思路。
#👍 相关视频教程使用Redis+AOP优化权限管理功能open in new window
#前置知识学习本文需要一些Spring Data Redis的知识,不了解的朋友可以看下《Spring Data Redis 最佳实践!》。 还需要一些Spring AOP的知识,不了解的朋友可以看下《SpringBoot应用中使用AOP记录接口访问日志》。
#问题重现在mall-security模块中有一个过滤器,当用户登录后,请求会带着token经过这个过滤器。这个过滤器会根据用户携带的token进行类似免密登录的操作,其中有一步会从数据库中查询登录用户信息,下面是这个过滤器类的代码。
1234567891011121314151617181920212223242526272829303132333435363738/** * JWT登录授权过滤器 * Created b ...
商品SKU功能设计与优化
原来的商品 SKU 设计存在着两个问题,一个是 SKU 表设计上面比较固化,无法扩展。另一个是当修改了商品信息之后,商品 SKU 的 ID 会发生变化,由于购物车表和订单商品表都关联了商品 SKU 的 ID,这样就会导致匹配不上。最近对这两个问题做了点优化,下面来聊聊优化的思路。
#👍 相关视频教程商品SKU功能设计与实现open in new window
#商品的SPU和SKU
首先我们来了解下商品SPU和SKU的概念,可能很多没有接触过电商的朋友都不了解。
SPU(Standard Product Unit ):指的是标准商品单位,商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个商品的特性;
SKU(Stock Keeping Unit):库存量单位,是物理上不可分割的最小存货单元。
举个例子:比如说现在有个手机商品叫小米8,小米8有不同的属性,比如有它有黑色和蓝色的,有32G和64G版本的。此时小米8就是一个SPU,而小米8黑色64G就是一个SKU。
#商品的SKU设计#以前的设计商品的SKU信息是存储在pms_sku_stock表 ...
前后端分离项目,引入Spring Cloud Gateway遇到的一个问题
随着项目架构的越来越复杂,引入了新的技术,新的问题也在产生,本文将讲述一个由于网关引起的前端调用问题。
#问题产生我的mall项目升级到微服务架构以后,加入了基于Spring Cloud Gateway的网关系统,前端调用相关服务时应该统一从网关进行调用,本以为前端直接调用网关没啥问题,后来发现会产生无法调用的情况,下面我们来记录下这个问题以及解决思路。
#问题重现与解决
这里我们以mall-swarm中的代码为例来演示下该问题的产生与解决。
首先我们先把mall-registry、mall-config、mall-gateway、mall-admin这些服务依次启动起来;
再启动前端项目mall-admin-web;
访问登录页面进行登录操作,发现无法登录,OPTIONS请求返回状态码403,到此我们还看不来是啥问题;
我们点开Console来看看到底报了啥错,发现了CORS这个关键信息,可以确定是产生了跨域问题,网关没有支持跨域;
接下来只要让网关支持跨域就可以了,在mall-gateway中添加全局跨域配置即可:
1234567891011121314 ...
前后端分离项目,如何优雅实现文件存储!
在上一节中我们讲到了使用 MinIO 来自建对象存储服务,这次我们来讲下 MinIO 如何结合 SpringBoot 和 Vue 来实现文件存储。
#👍 相关视频教程
MinIO使用教程open in new window
mall整合MinIO实现文件上传open in new window
#学前准备学习本文需要一些MinIO的基础知识,还不了解的小伙伴可以参考下:Github标星19K+Star,10分钟自建对象存储服务!
#结合SpringBoot使用
接下来我们将结合SpringBoot来实现一个完整的图片上传与删除操作。
上传流程示意图:
在pom.xml中添加MinIO的相关依赖:
123456<!--MinIO JAVA SDK--><dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>3.0.10</version></de ...
前后端分离项目,如何解决跨域问题
跨域资源共享(CORS)是前后端分离项目很常见的问题,本文主要介绍当 SpringBoot 应用整合 SpringSecurity 以后如何解决该问题。
# 👍 相关视频教程前后端分离项目解决跨域问题open in new window
# 什么是跨域问题CORS 全称 Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问的那个资源就会遇到跨域问题。
# 跨域问题演示及解决
我们使用 mall 项目的源代码来演示一下跨域问题。此时前端代码运行在 8090 端口上,后端代码运行在 8080 端口上,由于其域名都是 localhost,但是前端和后端运行端口不一致,此时前端访问后端接口时,就会产生跨域问题。
# 点击前端登录按钮
此时发现调用登录接口时出现跨域问题。
# 覆盖默认的 CorsFilter 来解决该问题
添加 GlobalCorsConfig 配置文件来允许跨域访问。
1234567891011121314 ...
仅需四步,整合SpringSecurity+JWT实现登录认证 !
学习过我的 mall 项目的应该知道,mall-admin 模块是使用 SpringSecurity+JWT 来实现登录认证的,而 mall-portal 模块是使用的 SpringSecurity 基于 Session 的默认机制来实现登陆认证的。很多小伙伴都找不到 mall-portal 的登录接口,最近我把这两个模块的登录认证给统一了,都使用 SpringSecurity+JWT 的形式实现。 主要是通过把登录认证的通用逻辑抽取到了 mall-security 模块来实现的,下面我们讲讲如何使用 mall-security 模块来实现登录认证,仅需四步即可。
#整合步骤
这里我们以mall-portal改造为例来说说如何实现。
第一步,给需要登录认证的模块添加mall-security依赖:
1234<dependency> <groupId>com.macro.mall</groupId> <artifactId>mall-security</artifactId></dependency& ...
给Swagger升级了新版本,没想到居然有这么多坑!
看着 mall 项目中古老的 Swagger API 文档样式,这次我终于下定决心要给它升个级了。升级过程中遇到了好多坑,不过只要用好 Maven,这些都不是个事!
#选择升级版本首先我们选择下需要升级的版本,直接去Maven仓库看下,哪个版本使用的比较多。虽然有最新版本2.10.x,但是几乎没什么人用,而上一个版本2.9.x使用的人却很多,看样子还是2.9.x版本比较稳定,我们选择升级到2.9.2版本。
#升级Swagger
接下来我们就可以开始升级Swagger版本了,原来项目里用的是2.7.0版本。
由于mall项目使用父项目来统一管理依赖,所以只要修改父项目中的Swagger依赖版本即可,父项目的pom.xml在项目根目录下;
123<properties> <swagger2.version>2.9.2</swagger2.version></properties>
运行mall-admin项目发现无法启动,报错信息如下,有个依赖里面的某个方法找不到了,一看是guava里面的,估计是版本的问题;
1234 ...
搞定Mall项目中的权限管理功能,弄懂这些问题就妥了!
最近发现很多朋友问我权限管理功能相关的问题,这里整理了下问的比较多的问题,统一答复下!
#👍 相关视频教程
权限模块数据库表解析open in new window
权限模块接口设计与实现_上篇open in new window
权限模块接口设计与实现_下篇open in new window
#mall项目中的权限管理功能是如何实现的?之前写过几篇文章,包括了权限管理功能介绍、后端实现和前端实现,看一下基本就清楚了!
《大家心心念念的权限管理功能,这次安排上了!》
《手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!》
《手把手教你搞定权限管理,结合Vue实现菜单的动态权限控制!》
#ums_permission表还在使用么?ums_permission表已经不再使用了,不再使用的表还包括ums_admin_permission_relation和ums_role_permission_relation表,最新版已经移除了相关使用代码。
#mall项目升级代码后ums_resource表找不到?升级代码以后需要同时导入最新版本的SQL脚本 ...
mall整合Elasticsearch实现商品搜索
本文主要讲解 mall 整合 Elasticsearch 的过程,以实现商品信息在 Elasticsearch 中的导入、查询、修改、删除为例。
#👍 相关视频教程mall整合Elasticsearch实现商品搜索open in new window
#项目使用框架介绍#Elasticsearch
Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。 它能从项目一开始就赋予你的数据以搜索、分析和探索的能力,可用于实现全文搜索和实时数据统计。
#Elasticsearch的安装和使用
下载Elasticsearch6.2.2的zip包,并解压到指定目录,下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-2-2open in new window
安装中文分词插件,在elasticsearch-6.2.2\bin目录下执行以下命令:elasticsearch-plugin install https://github.com/medcl/elasticsearc ...
