全面升级!一套基于最新版Spring Cloud的微服务实战项目!

最近把mall-swarm项目升级支持了最新版Spring Cloud+Spring Boot 3+JDK17,今天就来介绍下mall-swarm项目做了哪些升级,包括依赖的升级、框架的用法升级以及运行部署的改动,希望对大家有所帮助!

mall-swarm项目简介

这里还是简单介绍下mall-swarm项目吧,mall-swarm项目(11k+star)是一套微服务商城系统,采用了Spring Cloud Alibaba、Spring Boot 3.2、JDK17、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。

后台管理系统演示

后台管理系统演示地址:https://www.macrozheng.com/admin/index.html

移动端商城演示

移动端商城演示地址(浏览器切换到手机模式体验更佳):https://www.macrozheng.com/app/

系统架构

mall-swarm采用目前主流的微服务技术栈实现,涵盖了一般项目中几乎所有使用的技术。同时项目业务完整,包括前台商城和后台管理系统,能支持完整订单流程,通过下面这张架构图,大家应该能对mall-swarm项目的架构有所了解了。

升级版本

目前项目中的依赖都已经升级到了最新主流版本,具体的版本可以参考下表。

框架 版本 说明
Spring Cloud 2021.0.3->2023.0.1 微服务框架
Spring Cloud Alibaba 2021.0.1.0->2023.0.1.0 微服务框架
Spring Boot 2.7.5->3.2.2 Java应用开发框架
Spring Boot Admin 2.7.5->3.2.2 微服务应用监控
Sa-Token Spring Security Oauth2->Sa-Token 认证和授权框架
Nacos 2.1.0->2.3.0 微服务注册中心
MyBatis 3.5.10->3.5.14 ORM框架
MyBatisGenerator 1.4.1->1.4.2 数据层代码生成
PageHelper 5.3.2->6.1.0 MyBatis物理分页插件
Knife4j 3.0.3->4.5.0(SpringFox->SpringDoc) 文档生产工具
Druid 1.2.14->1.2.21 数据库连接池
Hutool 5.8.9->5.8.16 Java工具类库

升级用法

在mall-swarm项目升级Spring Boot 3的过程中,有些框架的用法有所改变,比如微服务权限解决方案改用了Sa-Token,微服务API文档聚合方案中的Knife4j实现改用了SpringDoc,商品搜索功能中使用了Spring Data Elasticsearch的新用法,这里我们将着重讲解这些升级的新用法!

微服务权限解决方案升级

由于之前使用的基于Spring Security Oauth2权限解决方案已经不再支持Spring Boot 3,这里改用了Sa-Token提供的微服务权限解决方案。

  • 在mall-gateway网关服务上进行了比较大的改动,比如之前使用AuthorizationManager来实现动态权限,现在使用了SaReactorFilter来实现动态权限;
/**
 * @auther macrozheng
 * @description Sa-Token相关配置
 * @date 2023/11/28
 * @github https://github.com/macrozheng
 */
@Configuration
public class SaTokenConfig {
   

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 注册Sa-Token全局过滤器
     */
    @Bean
    public SaReactorFilter getSaReactorFilter(IgnoreUrlsConfig ignoreUrlsConfig) {
   
        return new SaReactorFilter()
                // 拦截地址
                .addInclude("/**")
                // 配置白名单路径
                .setExcludeList(ignoreUrlsConfig.getUrls())
                // 鉴权方法:每次访问进入
                .setAuth(obj -> {
   
                    // 对于OPTIONS预检请求直接放行
                    SaRouter.match(SaHttpMethod.OPTIONS).stop();
                    // 登录认证:商城前台会员认证
                    SaRouter.match("/mall-portal/**", r -> StpMemberUtil.checkLogin()).stop();
                    // 登录认证:管理后台用户认证
                    SaRouter.match("/mall-admin/**", r -> StpUtil.checkLogin());
                    // 权限认证:管理后台用户权限校验
                    // 获取Redis中缓存的各个接口路径所需权限规则
                    Map<Object, Object> pathResourceMap = redisTemplate.opsForHash().entries(AuthConstant.PATH_RESOURCE_MAP);
                    // 获取到访问当前接口所需权限(一个路径对应多个资源时,拥有任意一个资源都可以访问该路径)
                    List<String> needPermissionList = new ArrayList<>();
                    // 获取当前请求路径
                    String requestPath = SaHolder.getRequest().getRequestPath();
                    // 创建路径匹配器
                    PathMatcher pathMatcher = new AntPathMatcher();
                    Set<Map.Entry
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值