# vue_shop_api **Repository Path**: l1470362551/vue_server_api ## Basic Information - **Project Name**: vue_shop_api - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 1 - **Created**: 2021-04-25 - **Last Updated**: 2021-08-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 电商后台管理系统 [预览](https://www.hejiu.ren:442/login) [API接口](https://www.hejiu.ren:9999/api/private/v1) ### 大家有问题尽量在这里提: https://gitee.com/l1470362551/vue_server_api/issues #### 超级管理员 用户名:admin 密码:123456 #### 普通用户 用户名:test123 密码:123456 #### 其他角色 用户名:【linken,asdf1,asdf123】 密码:123456 ### 项目介绍 电商后台管理系统(E-commerce background management system)是一套简单系统,基于SpringBoot、Shrio、JWT、Vue实现,采用前后端分离开发模式。后台管理系统具有用户管理、数据统计、权限管理、订单管理、商品管理五个模块组成。 使用JWT进行认证,使用Shiro进行授权,由于用户的权限信息一般不发生改变,所以使用Redis对用户的权限信息进行缓存,减少Mysql压力 ### 项目架构 #### 系统架构图 ![image-20210515160946423](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515160946423.png) #### 目录说明 ```text -─api --API服务包 ├─bean --实体类和参数类和结果类 ├─common --通用包 │ ├─handler --统一处理异常 │ └─response --统一处理结果 ├─config --配置包 ├─controller--处理请求 ├─exception --自定义异常 ├─jwt --有关jwt类,如JWT token 认证,JWT tonken生成 ├─mapper --与Mysql交互,编写sql语句 ├─service --业务接口 │ └─impl --实现业务接口,由controller调用 ├─shiro --设置shiro │ ├─cache --设置shiro缓存 │ └─realm --设置shiro的认证和授权 ├─utils --工具类 └─vo --参数类 ``` ### 技术选型 #### 后端技术 技术|说明|版本 ---|---|--- Spring Boot|容器+MVC框架|2.4.5 MyBatis Plus|MyBatis增强工具|3.4.1 MySql|数据库| 5.7.34 Mysql-connector-java|java连接数据库|5.1.9 Redis|缓存用户权限| Lombok|简化对象封装工具| Java|运行后端项目|9.0.4 ### 环境搭建 #### 开发环境 工具|版本号 ---|--- JDK|1.8 MySql|5.7.22 Redis|5.0 #### 开发工具 工具|说明 ---|--- IDEA|Java代码编译环境 Navicat|数据库可视化工具 Postman|接口调试工具 Xshell|Linux远程连接工具 Xftp|数据传输工具 Notepad++|好用的记事本 Typora|编写README文件 ### 本地运行API教程 - #### 环境及插件要求 - Jdk8+ - Mysql5.5+ - Maven - Lombok(重要) - #### 导入项目 - IntelliJ IDEA:Import Project -> Import Project from external model -> Maven - Eclipse:Import -> Exising Mavne Project - #### 本地运行项目 - 通过Java应用方式运行api目录下的VueApiServerApplication.java文件 - Mysql数据库配置:数据库名称vue_api 用户root 密码:root - 在MySQL的客户端中执行Sql脚本 `source vue_api.sql` [Sql脚本](./vue_api.sql) - Redis数据库设置:查看redis数据库是否正常运行,无需用户名和密码即可访问 - 接口访问地址:https://localhost:442 - 由于是本地访问,Postman不需要验证SSL证书 ![image-20210515162451461](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515162451461.png) - 由于是前端是通过axios来发送网络请求的,这就要求前后端的协议要一致,所以要求注释掉配置文件的SSL证书,让后端接口变成HTTP协议,这样前后的协议就一致了 ### 功能列表 - 用户管理:用于管理后台系统的用户,可进行增删改查等操作。 - 权限管理:分配权限的最小单元,通过角色给用户分配权限。 - 订单管理:用于对订单进行管理,可进行增删改查等操作。。 - 商品管理:对商品进行管理,可进行增删改查等操作。 - 数据统计:对用户的来源进行统计,返回图表数据,以供前端渲染。 ### 开发流程 #### 数据库表设计 [表结构](./vue_api_structure.sql) 1. ##### 用户表(sp_manager) 1. ![image-20210515171209524](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515171209524.png) 2. **role_id**字段指明用户的角色id,通过role_id就可以确定用户的角色 3. 根据**RBAC**(Role-Based Access Control)来设计权限管理,为了快速开发,在本项目中采用了单角色的设计 一个用户只有一个角色的设定 4. 由于用户必须有角色,而用户的角色只能来自角色表,用户表依赖于角色表,所以需要将role_id设置为外键(Foreign Key),以保持数据的一致性和完整性。 5. **mg_salt**字段为用户密码的随机盐可以增加数据的安全性,即使数据库的密码暴露,也很难破解 6. **mg_state**字段为当前用户的状态,如果为0表示用户无法登录,即认证失败,属于权限控制的认证部分 7. **mg_pwd**字段为用户密码,是原始密码经过md5+salt处理而得到的。 8. 扩展:如果采用一个用户有多个角色,一个角色对应多个用户,属于多对多,应该采用三张表,中间表进行关联其他两张表 2. ##### 角色表(sp_role) 1. ![image-20210515171923240](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515171923240.png) 2. **ps_ids**字段指定角色对应的所有的权限id,通过权限id可以获取权限信息,一个角色对应多个权限,一个权限对应多个角色,多对多,依然可以采用三张表,中间表做关联,为了方便,在本项目中采用字符串的形式存储多个权限id 3. 建议:应该采用三张表来设计角色和权限的对应,因为是多对多的关系,尽量不要采用本项目的设计 3. ##### 权限表(sp_permission_api) 1. ![image-20210515173550168](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515173550168.png) 2. **ps_api_action**字段为权限信息,通过ps_id来获取权限信息 3. **ps_api_action**字段值应该类似这样**`user:createGood:*`** ![image-20210515173934322](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515173934322.png) 4. user:用户;createGood:添加商品的操作;*:表示任意 4. ##### **物流表**(sp_express) 1. ![image-20210515174228480](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515174228480.png) 2. 数据在数据库中是写死的,对物流信息的CRUD操作在本项目中没有实现,只对物流信息做了展示而已 5. ##### **分类表**(sp_category) 1. 修改了该表的一些cat_pid和cat_level数据错误的问题 6. ##### 其他表 1. 查看项目目录下的 **vue_api_structure.sql** 文件 #### 用户管理开发 ##### 用户注册流程 1. 注册的用户的角色**只能**是 **test**,为了确保系统的安全性,应该对所有普通用户设置为**test角色** 2. 用户注册的必要性:用户注册可以让系统拥有用户,权限管理系统是必须有用户的,否则就无法进行区分不同的用户 3. 用户发起post请求提交数据 4. controller层:参数封装为manager对象,调用service层 1. ``` Manager manager = new Manager() ``` 2. `managerService.addUser(manager);` 5. service层,加密过程 ![image-20210515180445812](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515180445812.png) 6. dao层,持久化到数据库 ![image-20210515180604462](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515180604462.png) ##### 用户认证流程 1. 认证即登录,本项目采用了JWT充当token,没有采用Shiro自带的Session作为token,原因如下 1. 移动端上不支持 cookie,而 token 只要客户端能够进行存储就能够使用,因此 token 在移动端上也具有优势。 2. jwt存储在客户端,减少服务器内存的开销 3. 服务器无状态,在分布式的应用上,提高了应用的扩展能力。 2. 用户在login页面上发起post请求 3. shiro进行拦截,由于是login请求,所以直接放行该请求 4. controller:后端对参数进行校验,校验通过后调用service层 ![image-20210515182316875](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515182316875.png) 5. service层:调用Shiro自带的认证模块,由subject=》SecurityManager=>Realm 1. 调用subject.login方法![image-20210515182520989](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515182520989.png) 2. 判断token类型,从而决定去哪个Realm查询数据 ![image-20210515204501806](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515204501806.png) ![image-20210515183147032](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515183147032.png) 3. 由于token的类型是UsernamePasswordToken,所以去ShiroRealm的doGetAuthenticationInfo方法中查询数据 ![image-20210515183412674](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515183412674.png) 4. 返回查询结果,交由SecurityManger进行比对和验证,SecurityManger会将用户的输入的密码进行md5+salt+iteration后再与数据库的密码进行比对。 5. 如果认证通过没有异常发生,认证失败则有异常 1. 认证通过,返回用户信息,并为用户颁发jwt token 1. ![image-20210515183831600](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515183831600.png) 2. 认证失败,捕获对应的认证失败类型,从而返回对应的错误信息 1. 用户名或密码错误 ![image-20210515184100729](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515184100729.png) 2. 用户锁定 ![image-20210515184136531](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515184136531.png) 3. 其他错误 ![image-20210515184209137](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515184209137.png) ##### 用户授权流程 1. 授权流程图 ![用户授权](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/用户授权.png) ​ 2.授权之前必须先认证,如果认证不通过则不会进行授权 ##### 用户列表 1. 查看系统的所有用户信息 1. 用户姓名 2. 用户邮箱 3. 用户电话 4. 用户所属角色 5. 用户的状态 ![image-20210630215549707](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215549707.png) 2. 支持通过用户名进行模糊查询 ![image-20210630215656150](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215656150.png) 3. 添加用户 ![image-20210630215710731](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215725482.png) 4. 编辑用户 ![image-20210630215725482](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215710731.png) 5. 分配角色 ![image-20210630215744977](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215252156.png) 6. 删除用户 #### 权限管理开发 1. 角色列表 1. 查看所有角色的信息 1. 角色名称 2. 角色描述 ![image-20210630215252156](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215320562.png) 2. 可视化删除角色的权限信息 ![image-20210630215320562](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215744977.png) 3. 编辑角色 1. 角色名称 2. 角色描述 ![image-20210630215347844](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215419141.png) 4. 分配权限 ![image-20210630215419141](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215216741.png) 5. 删除角色 2. 权限列表 ![image-20210630215216741](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630215347844.png) #### 商品管理开发 ##### 商品列表 1. 查看所有商品信息 1. 商品名称 2. 商品价格 3. 商品重量 4. 创建时间 ![image-20210630205918515](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210102205.png) 2. 支持通过商品名称进行模糊查询 ![image-20210630210028520](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210028520.png) 3. 添加商品 1. 自定义商品的基本信息 2. 选择商品参数,是由商品分类来决定的 3. 选择商品属性,是由商品分类来决定的 4. 添加商品图片 5. 添加提供商品描述 ![image-20210630210102205](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630205918515.png) 4. 编辑商品 1. 编辑商品基本信息 2. 编辑商品参数 3. 编辑商品属性 4. 编辑商品图片 5. 编辑商品描述 ![image-20210630210318583](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210612366.png) ##### 分类参数 1. 动态参数 1. 查看某个分类下的动态参数 ![image-20210630210549599](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210318583.png) 2. 添加动态参数 ![image-20210630210612366](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210549599.png) 3. 可视化添加和删除动态参数 ![image-20210630210701845](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210701845.png) 4. 修改动态参数 ![image-20210630210719987](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210815711.png) 2. 静态属性 1. 显示所有属性 ![image-20210630210759391](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210759391.png) 2. 添加属性 ![image-20210630210815711](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210842528.png) 3. 可视化添加和删除属性 ![image-20210630210842528](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210719987.png) 4. 修改属性 ![image-20210630210859036](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630210859036.png) ##### 商品分类 1. 显示所有级别的分类 ![image-20210630211107907](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630211107907.png) 2. 添加分类 ![image-20210630211132387](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630211153517.png) 3. 编辑分类 ![image-20210630211153517](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630205405144.png) 4. 删除分类 #### 订单管理开发 ##### 订单列表 1. 展示所有订单信息 1. 订单编号 2. 订单价格 3. 是否付款 4. 是否发货 5. 下单时间 ![image-20210630205205219](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630211132387.png) 2. 支持通过订单编号进行模糊查询 ![image-20210630205258808](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630205205219.png) 3. 支持修改订单 1. 是否发货 2. 支付方式 3. 订单价格 4. 订单编号 ![image-20210630205405144](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630205258808.png) 4. 支持查看物流信息,数据在数据库是写死的,没有实现业务功能,所有订单使用同一个物流数据 ![image-20210630205451318](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630205451318.png) #### 数据统计开发 1. 数据在数据库是写死的,该项目仅仅只是把数据从MySQL中读取出来,进行展示 ![image-20210630205035553](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630205035553.png) 2. 思路:可以通过过滤器(Filter)进行统计用户来源和人数和访问书简 ### 部署流程 #### 软件环境 1. [Xshell](https://www.netsarang.com/zh/),在本地输入命令,在远程服务器执行,远程操作服务器 2. [Xftp](https://www.netsarang.com/zh/),用于本地计算机与远程服务器进行文件传输 #### 技术选型 根据项目的复杂度和学习成本,使用[Docker](https://www.docker.com/)把项目部署到服务器,没有使用[K8s](https://www.kubernetes.org.cn/k8s)进行部署 #### 服务器选择 根据项目的体积和访问量,选择如下配置的服务器 | 内存 | CPU核心数 | 内网带宽 | 价格 | 系统 | 硬盘 | | :--: | :-------: | :------: | :---------: | :--------: | :---: | | 1GiB | 1 | 1Gbps | ¥ 33.0 /月 | CentOS 7.6 | 10GiB | 厂商:[阿里云](https://ecs-buy.aliyun.com/wizard?spm=5176.22772544.0.0.389d2ea9xP0bHo#/prepay/cn-shenzhen) #### 远程连接服务器 1. 服务器的防火墙需要开放22端口 2. 服务器需要为root用户设置密码 3. 使用XShell客户端连接服务器,通过SSL协议方式来远程连接服务器,通过用户名和密码的方式进行认证 #### 服务器防火墙配置 ![image-20210630201635213](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630155014095.png) 需要开放的端口如下 | Tomcat(手动) | Nginx(手动) | SSH(默认) | Docker(可选) | 阿里云监控(可选) | | :------------: | :-----------: | :---------: | :------------: | :----------------: | | 9999 | 442和81 | 22 | 2375 | 3128 | #### Docker与Docker-Compose相关配置 1.安装docker ``` curl -sSL https://get.daocloud.io/docker | sh ``` 2.启动Docker ``` sudo systemctl start docker ``` 3.判断Docker是否安装成功 ``` docker version ``` 4.安装docker-compose ``` curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose ``` 5.将可执行权限应用于二进制文件 ``` sudo chmod +x /usr/local/bin/docker-compose ``` 6.创建软链 ``` sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose ``` 7.测试是否安装成功 ``` docker-compose --version ``` #### 配置镜像加速服务 1. 以阿里云为例子,按照下图的步骤找到shell命令,在服务器中执行矩形框中的命令 ![image-20210630154159758](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630201635213.png) #### 域名的购买 1. 购买域名需要实名认证,可能需要1天左右,比较耗时 2. 购买二手域名即可 3. 建立IP地址与域名的映射 4. 为后面的SSL配置做铺垫 #### SSL证书申请 1. 域名购买后才能进行SSL的配置 2. 先申请免费的证书 ![image-20210630155014095](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630154159758.png) 3. 该项目使用了两个服务器,所以需要下载两个证书,Nginx和Tomcat ![image-20210630155403181](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630155403181.png) 4. **修改刚刚下载的Nginx的SSL的文件夹和文件名称,命名规则如下图** ​ ![image-20210630202958000](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630203207158.png) #### 编写后端的Dockerfile和准备相关的文件 1. 相关的文件有 1. jar包 注意SSL配置替换为你自己的,然后使用Maven重新打包(先clean后package),**生成属于你自己的jar包** ![image-20210630203207158](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630202958000.png) 2. Dockerfile,构建镜像,提供SSH文件和jar包,执行jar包,暴露端口 3. `5875988_www.hejiu.ren.pfx.pfx`即SSL证书文件,**替换为你自己的,如下图** 4. 结构图 ![image-20210630203308464](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630200054804.png) #### 编写前端的Dockerfile和准备相关的文件 1. 相关的文件有 1. dist目录,**需要替换接口地址即baseURL为你自己的IP地址,然后通过`npm run build`重新打包生成dist目录** ![image-20210630164509758](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630203308464.png) 2. Dockerfile,构建前端镜像,完成一些初始化工作,如配置nginx服务器 3. cert目录,**需要替换为你自己的申请的证书**,修改文件夹的名称和文件名称规则如下图 注意文件夹和文件的命名 ![image-20210630200054804](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630164509758.png) 4. nginx.conf,配置nginx服务器 1. **第一处需要修改为你自己的域名** ![image-20210630200726989](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630203419779.png) 2. **第二处修改为自己的域名** ![image-20210630200754845](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630200726989.png) 5.结构图 ​ ![image-20210630203419779](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630200754845.png) #### 编写MySQL的Dockerfile和准备相关的文件 1. 相关的文件有 1. Dockerfile 2. SQL脚本 3. mysql.cnf,解决中文乱码问题 2. 结构图 ![image-20210630201352350](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630201352350.png) #### 编写docker-compose.yml 1. 对MySQL,Redis,Nginx,Tomcat等容器进行编排,按照依赖关系来启动相应的容器 #### 一键启动所有容器 1. 使用`cd`命令进入docker-compose.yml文件所在的目录,本项目是project1目录 ![image-20210630203745650](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630203745650.png) 2. 在project1目录下执行该命令,启动所有容器 ``` `docker-compose up -d` ``` #### 配置MySQL 1. 进入MySQL容器 ``` docker exec -it mysql01 bash ``` 2. 登录MySQL ``` mysql -uroot -pFGsd_jfdlaflk455-+ ``` 3. 导入数据 ``` source vue_api.sql ``` 4. 退出MySQL ``` \q ``` 5. 退出容器 ``` exit ``` #### 测试 1. 前端:https://www.hejiu.ren:442/login,更改为你自己的域名和端口 2. 后端:https://www.hejiu.ren:9999/api/private/v1/,更改为你自己的域名和端口 #### 目录图 ![image-20210630200430713](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210630200430713.png) #### [部署资源](https://gitee.com/l1470362551/vue_server_api/tree/master/deploy) ### 常见问题 0、maven下载jar包长时间无反应? ```text 原因:网络原因连不上maven仓库或其他未知原因导致IDE间接性抽风,导致无法下载联网下载jar包 解决:网络原因自行解决,如果网络没问题就不要一直傻傻的等了,重启IDE,让它重新联网下载 ``` 1、IDE编译报错,识别不到实体类的set、get方法? ```text 原因:项目使用lombok开发,lombok会在生成class字节码文件帮我们生成set、get等方法,java文件没有set、get等方法,IDE索引不到set、get方法所以编译报错 解决:IDE安装lombok插件即可能识别到对应set、get方法,重启生效 ``` 2、数据库文件在哪? ```text 原因:没有好好看文档,建议先好好看下README.md 解决:vue_api.sql文件在vue_api_server目录下面 ``` 3、如何启动程序? ```text 原因:对springboot项目不熟,建议先去了解一下springboot 解决:等待IDE识别成springboot项目后,在BaseAdminApplication.java中运行main函数启动程序 ``` 5、启动程序失败? ```text 原因:可能是端口占用问题,本项目http:81端口,https:442端口 解决: 方法一:在cmd中使用kill命令杀死占用端口的程序 方法二:修改项目的端口 http端口:在config目录下的httpsConfig类的方法中修改端口号 https端口:在application.yml中修改 ``` 6、没有权限访问接口? ```text 原因:请求头没有加Authorization字段,值从登录接口的返回值token获取 解决:先登录,获取token值,在设置Authorization请求头,具体见下图 ``` 使用Postman进行login接口测试 ![image-20210515165659754](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515165659754.png) 获取token值 ![image-20210515165728857](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515165728857.png) 设置请求头 ![image-20210515165937594](https://gitee.com/l1470362551/typora_imgs/raw/master/imgs/image-20210515165937594.png)