环境搭建与权限登录
1.项目介绍
1.1. 概述
神领物流是一个基于微服务架构体系的【生产级】物流项目系统
1.2. 基本业务流程

流程说明:
- 客户在【神领物流微信小程序】中填写收、发件人地址,以及物品信息,提交订单
- 下单成功后,【快递员上门取件】,并要求用户进行【在线支付】
- 快递员取件成功后,会将快件送回到【营业网点】
- 快件到达营业网点后,司机开始运输,将快件交由【转运中心】进行一系列的转运
- 最后,快件会到达收件人所在的【营业网点】,再由【快递员】进行【派件】操作
- 收件人可以进行【签收】或【拒收】操作
1.3. 系统架构

1.4. 技术架构

2.环境搭建
.jpg)
2.1.配置本机hosts:
在本机hosts文件中设置如下配置:
(也可以用uTools工具中的hosts插件修改)
192.168.150.101 git.sl-express.com
192.168.150.101 maven.sl-express.com
192.168.150.101 jenkins.sl-express.com
192.168.150.101 auth.sl-express.com
192.168.150.101 rabbitmq.sl-express.com
192.168.150.101 nacos.sl-express.com
192.168.150.101 neo4j.sl-express.com
192.168.150.101 xxl-job.sl-express.com
192.168.150.101 eaglemap.sl-express.com
192.168.150.101 seata.sl-express.com
192.168.150.101 skywalking.sl-express.com
192.168.150.101 api.sl-express.com
192.168.150.101 admin.sl-express.com
服务列表:
| 名称 | 地址 | 用户名/密码 | 端口 |
|---|---|---|---|
| git | http://git.sl-express.com/ | sl/sl123 | 10880 |
| maven | http://maven.sl-express.com/nexus/ | admin/admin123 | 8081 |
| jenkins | http://jenkins.sl-express.com/ | root/123 | 8090 |
| 权限管家 | http://auth.sl-express.com/api/authority/static/index.html | admin/123456 | 8764 |
| RabbitMQ | http://rabbitmq.sl-express.com/ | sl/sl321 | 15672 |
| MySQL | - | root/123 | 3306 |
| nacos | http://nacos.sl-express.com/nacos/ | nacos/nacos | 8848 |
| neo4j | http://neo4j.sl-express.com/browser/ | neo4j/neo4j123 | 7474 |
| xxl-job | http://xxl-job.sl-express.com/xxl-job-admin | admin/123456 | 28080 |
| EagleMap | http://eaglemap.sl-express.com/ | eagle/eagle | 8484 |
| seata | http://seata.sl-express.com/ | seata/seata | 7091 |
| Gateway | http://api.sl-express.com/ | - | 9527 |
| admin | http://admin.sl-express.com/ | - | 80 |
| skywalking | http://skywalking.sl-express.com/ | - | 48080 |
| Redis | - | 123321 | 6379 |
| MongoDB | - | sl/123321 | 27017 |
环境说明
通过上面的测试,可以通过域名访问各种服务了,访问过程是怎么样的呢?其实,在101机器中安装了nginx,通过反向代理功能访问到各种对应的服务。如下:
.jpg)
说明:
- 通过浏览器按照域名的访问访问,如:http://git.sl-express.com/ ,先通过本地系统的
hosts文件找到映射的ip地址 - 此时,就会访问到虚拟机环境,由于请求没有加端口号,默认访问80端口
- 由于在101机器部署安装nginx服务并且占用的是80端口,请求就会进入nginx
- nginx会根据不同的域名将请求转发(反向代理)到不同的服务,例如:git.sl-express.com -> 127.0.0.1:18080 通过
vim /usr/local/src/nginx/conf/nginx.conf命令查看nginx的配置文件
server {
listen 80;
server_name git.sl-express.com;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location / {
client_max_body_size 1024m;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_pass http://127.0.0.1:10880;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name jenkins.sl-express.com;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location / {
client_max_body_size 300m;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2.2配置Maven私服
在101机器中提供了maven私服,需要本地配置maven(建议版本为3.6.x)才能使用私服,配置文件参考如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地仓库 这里要改成你自己的本地仓库位置 -->
<localRepository>D:\maven\apache-maven-3.6.1\maven_repository</localRepository>
<!-- 配置私服中deploy的账号 -->
<servers>
<server>
<id>sl-releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>sl-snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
<!-- 使用阿里云maven镜像,排除私服资源库 -->
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>central,jcenter,!sl-releases,!sl-snapshots</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>sl</id>
<!-- 配置项目deploy的地址 -->
<properties>
<altReleaseDeploymentRepository>
sl-releases::default::http://maven.sl-express.com/nexus/content/repositories/releases/
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
sl-snapshots::default::http://maven.sl-express.com/nexus/content/repositories/snapshots/
</altSnapshotDeploymentRepository>
</properties>
<!-- 配置项目下载依赖的私服地址 -->
<repositories>
<repository>
<id>sl-releases</id>
<url>http://maven.sl-express.com/nexus/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>sl-snapshots</id>
<url>http://maven.sl-express.com/nexus/content/repositories/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<!-- 激活配置 -->
<activeProfile>sl</activeProfile>
</activeProfiles>
</settings>
本地仓库:
<localRepository>D:\maven\apache-maven-3.6.1\maven_repository</localRepository>这部分指定了 Maven 的本地仓库位置,即 Maven 下载的依赖包将存储在这个目录下。
服务器配置(
servers): 配置了两个服务器,sl-releases和sl-snapshots,每个服务器都有对应的id、username和password。这些信息用于 Maven 与私服(私有 Maven 仓库)进行交互时的认证。镜像配置(
mirrors): 配置了一个镜像,mirror,它将所有请求重定向到阿里云的 Maven 镜像,除了sl-releases和sl-snapshots这两个私服资源库。这样可以加速依赖包的下载速度。配置文件(
profiles): 定义了一个名为sl的配置文件,其中包含了两个部分:properties和repositories。properties中定义了项目部署到私服的地址,分别用于发布版本(altReleaseDeploymentRepository)和快照版本(altSnapshotDeploymentRepository)。repositories中定义了两个仓库,sl-releases和sl-snapshots,分别对应于发布版本和快照版本的私服地址。这里指定了哪些版本可以从此仓库下载。
激活配置(
activeProfiles): 指定了 Maven 启动时默认激活的配置文件,这里是sl。
2.3git代码管理
2.3.1GitFlow工作流程
在gitflow流程中,master和develop分支属于长期分支,长期分支是相对稳定,所有开发完成或测试通过的提交最终都要合并到这两个分支上,他俩也有一些区别:
- master:发布上线时,基于master打tag,基于tag进行发布,不允许在该分支上开发,始终保持该分支的稳定。
- develop:开发阶段使用的分支,提交到该分支代码都是相对稳定的,不能直接基于此分支开发,如果开发新的功能,需要基于此分支创建新的分支进行开发功能,待功能开发、测试通过后合并到develop分支。
.jpg)
对于新功能的开发,基于Develop分支创建Feature分支,功能开发完后合并到Develop分支,禁止未开发完成的代码合并到Develop分支。
.jpg)
在开发中,新功能的代码已经全部合并到Develop分支,此时需要基于Develop分支创建Release分支,在Release分支中不再添加新的功能,只是做bug的修复,等测试完成bug全部修复之后,需要将Release分支合并到Master分支和Develop分支,并且基于Master打出版本的tag。
.jpg)
如果发布到生成环境的版本出现bug,比如:生产环境的v1.0版本出现bug需要尽快修复,此时就需要基于master创建hotfix分支,并且基于hotfix分支修复bug,待bug修复完成后需要将代码合并到master和develop分支。
.jpg)
2.3.2. 基于gogs服务开发
项目中将基于gogs服务进行开发
2.3.2.1. 拉取代码
拉取代码步骤:
- 在本地创建
sl-express文件夹,该目录存放项目课程期间所有的代码
- 启动idea,打开该目录

- 设置项目jdk为11版本

- 拉取sl-express-gitflow-web代码,在本地运行起来,目前项目版本为1.0。

- 拉取完成后,点击【Cancel】按钮:

- 导入Module:


- 测试功能:

2.3.2.2. 创建develop分支


推送develop分支到gogs:

推送成功:

2.3.2.3. 基于feature分支开发新功能
开发新的功能需要基于develop分支创建feature分支,假设我们需要增加一个相乘的接口。


在com.sl.gitflow.controller.GitFlowController中新增相乘的方法:
@ApiOperation("两个数相乘")
@GetMapping("/mul")
@ApiImplicitParams({@ApiImplicitParam(name = "value1", value = "第一个数", example = "1"), @ApiImplicitParam(name = "value2", value = "第两个数", example = "2")})
public R<Object> mul(@RequestParam(value = "value1") Long value1, @RequestParam(value = "value2") Long value2) {
return R.success(value1 * value2);
}
重启、测试:

测试完成后,将代码合并到develop分支:
提交代码(此时,在feature分支进行提交):

切换到develop分支:


推送develop分支到gogs:

推送成功:

推送完成后,一般情况需要将feature分支删除掉,不推送到远程仓库。

2.3.2.4. 创建Release分支
在develop分支开发基本上结束后,将基于develop分支创建release分支,在此分支进行测试,测试完成后合并到master和develop分支。


创建分支后,模拟测试和bug修复,对代码增加注释改动:

提交代码:

推送到远程仓库:

推送成功:

所有测试完成后,将release分支合并回master和develop,并且推送到远程仓库。


2.3.2.5. 创建tag标签

推送到远程:

推送成功:


创建tag完成后,就可以基于tag发布了。
3.项目代码列表
在虚拟机中的gogs服务中已经提供了项目中所涉及都的项目代码,目前项目拥有19个微服务,1个网关,1个parent工程,2个公共依赖工程。如下:
| 序号 | 项目名称 | 说明 |
|---|---|---|
| 1 | sl-express-parent | 父工程 |
| 2 | sl-express-common | 通用工程 |
| 3 | sl-express-mq | 统一消息代码 |
| 4 | sl-express-gateway | 统一网关 |
| 5 | sl-express-ms-base | 基础微服务 |
| 6 | sl-express-ms-carriage | 运费微服务 |
| 7 | sl-express-ms-courier | 快递员微服务 |
| 8 | sl-express-ms-dispatch | 调度微服务 |
| 9 | sl-express-ms-driver | 司机微服务 |
| 10 | sl-express-ms-oms | 订单微服务 |
| 11 | sl-express-ms-service-scope | 服务范围微服务 |
| 12 | sl-express-ms-sms | 短信微服务 |
| 13 | sl-express-ms-track | 轨迹微服务 |
| 14 | sl-express-ms-trade | 支付微服务 |
| 15 | sl-express-ms-transport | 路线微服务 |
| 16 | sl-express-ms-transport-info | 物流信息微服务 |
| 17 | sl-express-ms-user | 用户微服务 |
| 18 | sl-express-ms-web-courier | 快递员web服务 |
| 19 | sl-express-ms-web-customer | 用户web服务 |
| 20 | sl-express-ms-web-driver | 司机web服务 |
| 21 | sl-express-ms-web-manager | 后台web服务 |
| 22 | sl-express-ms-work | 运单微服务 |
| 23 | sl-express-ms-search | 搜索微服务 |
为什么要有父工程,用来定义各种依赖的版本号的!
❓思考:是否需要把所有的工程代码都拉取到本地进行编译运行?
不需要的。你只需要将自己将要负责的开发任务相关的代码拉取到本地进行开发即可,其他的服务都可以调用测试环境正在运行的服务。
另外,你有可能是没有权限拉取到其他开发组的代码的。
4.Jenkins
4.1、持续集成
持续集成是指,开发人员将代码合并到远程仓库后,需要【自动】的完成构建、部署等操作。
下面以Spring Boot web项目举例,说明使用Jenkins进行持续集成的过程。

过程说明:
- 本地开发环境推送代码到远程仓库
- 推送完成后,git服务会向Jenkins发送通知
- Jenkins接收到通知后,开始触发构建(也可以手动触发构建)
- 【git pull】从git仓库中拉取最新的代码
- 【maven package】通过maven进行打包,Spring Boot项目会打成可执行的jar包
- 【docker build & push】构建docker镜像,一般会将docker镜像上传到公司内部私服
- 【ssh remote】通过ssh命令登录到远程服务器(部署的目标服务器)
- 【docker pull】通过公司内部私服拉取docker镜像
- 【docker run】基于拉取到的镜像,运行容器
- 最后,完成构建
4.2、Jenkins使用
下面以部署【sl-express-gitflow-web】为例,通过Jenkins进行部署。
第一步,打开Jenkins,通过root/123登录。

第二步,创建构建任务:

第三步,设置任务内容:

设置一些构建参数:


设置版本号参数:(该参数会在后面部署时使用)

设置微服务注册到nacos中的ip地址:(该参数会在后面部署时使用)SPRING_CLOUD_NACOS_DISCOVERY_IP

设置端口参数:(该参数会在后面部署时使用)

设置服务名称参数:(该参数会在后面部署时使用)

设置git仓库信息:

设置分支:


设置构建步骤:

chmod a+rw /var/run/docker.sock

clean package -Dmaven.test.skip=true -U
设置部署脚本:

#!/bin/bash
# 微服务名称
SERVER_NAME=${serverName}
# 服务版本
SERVER_VERSION=${version}
# 服务端口
SERVER_PORT=${port}
# 源jar名称,mvn打包之后,target目录下的jar包名称
JAR_NAME=$SERVER_NAME-$SERVER_VERSION
# jenkins下的目录
JENKINS_HOME=/var/jenkins_home/workspace/$SERVER_NAME
#进入jenkins目录
cd $JENKINS_HOME
# 修改文件权限
chmod 755 target/$JAR_NAME.jar
#输出docker版本
docker -v
echo "---------停止容器($SERVER_NAME)---------"
docker stop $SERVER_NAME
echo "---------删除容器($SERVER_NAME)---------"
docker rm $SERVER_NAME
echo "---------删除镜像($SERVER_NAME:$SERVER_VERSION)---------"
docker rmi $SERVER_NAME:$SERVER_VERSION
echo "---------构建新镜像($SERVER_NAME:$SERVER_VERSION)---------"
docker build -t $SERVER_NAME:$SERVER_VERSION .
echo "---------运行服务---------"
docker run -d -p $SERVER_PORT:8080 --name $SERVER_NAME -e SERVER_PORT=8080 -e SPRING_CLOUD_NACOS_DISCOVERY_IP=${SPRING_CLOUD_NACOS_DISCOVERY_IP} -e SPRING_CLOUD_NACOS_DISCOVERY_PORT=${port} $SERVER_NAME:$SERVER_VERSION
开始构建:

构建日志:




测试:http://192.168.150.101:18099/doc.html

可以看到已经部署成功。
4.3、自动构建
想要实现在代码推送到git仓库后自动开始构建,需要分别在gogs和Jenkins中进行设置。
4.3.1、gogs设置
点击【仓库设置】:

添加web钩子:


url格式:http(s)://<< jenkins-server >>/gogs-webhook/?job=<< jobname >>
添加成功:

4.3.2、Jenkins设置

4.3.3、模拟推送
可以在gogs中模拟发起推送通知,来测试是否可以自动构建。

查看执行记录:

5、登录业务
登录业务分别在四个终端都有涉及
四端的需求文档地址:
| 用户端 | https://share.lanhuapp.com/#/invite?sid=qx01hbI7 密码: UxGE |
|---|---|
| 快递员端 | https://share.lanhuapp.com/#/invite?sid=qxe42Dya 密码: Nomz |
| 司机端 | https://share.lanhuapp.com/#/invite?sid=qX0NEmro 密码: yrzZ |
| 管理端 | https://share.lanhuapp.com/#/invite?sid=qX0axVem 密码: fh3i |
5.1、实现分析
实现登录业务主要会涉及到2个接口,分别是获取验证码、登录接口。
业务流程如下:
5.2、验证码功能
在登录功能中,为了防止恶意的登录操作,所以需要添加验证码功能,实现的效果如下:

5.3、拉取代码
登录 git 服务,找到 sl-express-ms-web-manager 工程,拷贝地址,在idea中拉取代码(注意存储路径)



添加modules,将 sl-express-ms-web-manager 加入进来

代码拉取完成
项目中的配置文件说明:
| 文件 | 说明 |
|---|---|
| bootstrap.yml | 通用配置项,服务名、日志文件、swagger配置等 |
| bootstrap-local.yml | 多环境配置,本地开发环境 |
| bootstrap-prod.yml | 多环境配置,生成环境(学习阶段忽略该文件) |
| bootstrap-stu.yml | 多环境配置,学生101环境 |
| bootstrap-test.yml | 多环境配置,开发组测试环境(学习阶段忽略该文件) |
| logback-spring.xml | 日志配置文件 |
5.4、实现分析
将工程启动后,通过swagger接口页面可以看到获取验证码的的接口。

可以看出,接口地址、请求方法、请求参数。
同样,也可以在资料中的接口文档查看(管理员端.md):

验证码的实现方式有很多种,项目中我们通过hutool工具包中的验证码模块来实现。实现的效果如下:

其实这样是不能满足需求的,需求中验证码是两个数字的运算,类似这样:
所以,需要使用自定义验证码功能:

5.5、具体实现
首先,基于master分支创建develop分支,用于功能的开发。

Controller的代码定义如下:com.sl.ms.web.manager.controller.auth.AuthController#captcha

具体的业务实现是在com.sl.ms.web.manager.service.AuthService中完成。
private static final String CAPTCHA_REDIS_PREFIX = "CAPTCHA_";
@Override
public void createCaptcha(String key, HttpServletResponse response) throws IOException {
//1. 生成验证码,指定宽、高、字符个数、干扰线条数
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(115, 42, 0, 10);
//1.1 设置生成器为数字计算验证码生成器并且指定参与计算最大数字位数为1,也就是个位数相加
lineCaptcha.setGenerator(new MathGenerator(1));
//1.2 获取生成的验证码值
String code = lineCaptcha.getCode();
//2. 将验证码的值写入到redis,有效期为1分钟
String redisKey = CAPTCHA_REDIS_PREFIX + key;
this.stringRedisTemplate.opsForValue().set(redisKey, code, Duration.ofMinutes(1));
//3. 输出到页面,设置页面不缓存
response.setHeader(HttpHeaders.PRAGMA, "No-cache");
response.setHeader(HttpHeaders.CACHE_CONTROL, "No-cache");
response.setDateHeader(HttpHeaders.EXPIRES, 0L);
lineCaptcha.write(response.getOutputStream());
}
Pragma是一个HTTP/1.0的头部字段,用于向后兼容。在HTTP/1.1中,Pragma头通常被Cache-Control头所取代。No-cache指令告诉浏览器和代理服务器,它们必须先向服务器确认响应是否被更改,才能使用缓存中的版本。
在Controller中调用Service中的方法:

5.6、测试
重启服务,基于swagger进行测试:

检查redis中的值:

可以看到,验证码数据成功写入到redis中。
6、部署前端
前面已经完成了验证码功能的开发,下面我们将基于前端页面进行测试,所以需要将前端部署起立,部署前端的步骤:
第一步:拉取【project-slwl-admin-vue】代码。

第二步:修改.env.production.stu文件,设置前后端交互接口改为本机地址和端口:

第三步,提交代码到git中,使用Jenkins进行部署:

访问地址进行测试:http://admin.sl-express.com/

查看发送的请求:

3.4、实现登录
获取验证码后,用户输入用户名和密码进行登录:

3.4.1、实现分析
在登录业务功能中,需要对用户输入的用户名、密码以及验证码进行校验,只有全部校验通过后才能是登录成功。
在登录成功后,需要生成用户的登录凭证,也就是token,在项目中,采用jwt的方式生成token。
在后续的请求中,前端需要将token放置到请求头中发送到服务端,服务端需要对token进行校验。

提交的参数:

响应数据结构参考swagger文档:

3.4.2、具体实现
/**
* 登录
*
* @param login 用户登录信息
* @return 登录结果
*/
@Override
public R<LoginDTO> login(LoginParamDTO login) {
//1. 校验参数
if (ObjectUtil.hasEmpty(login.getCode(), login.getKey())) {
return R.error("验证码不能为空");
}
if (ObjectUtil.hasEmpty(login.getAccount(), login.getPassword())) {
return R.error("用户名、密码不能为空");
}
//2. 校验验证码
String redisKey = CAPTCHA_REDIS_PREFIX + login.getKey();
String redisValue = this.stringRedisTemplate.opsForValue().get(redisKey);
if (ObjectUtil.isEmpty(redisValue)) {
return R.error("验证码已过期");
}
//验证码只能使用一次,所以需要将验证码删除
this.stringRedisTemplate.delete(redisKey);
boolean verify = new MathGenerator().verify(redisValue, login.getCode());
if (!verify) {
return R.error("验证码不正确");
}
//3. 校验用户名密码,校验通过生成token
return this.login(login.getAccount(), login.getPassword());
}
/**
* 登录获取token
*
* @param account 账号
* @param password 密码
* @return 登录信息
*/
@Override
public R<LoginDTO> login(String account, String password) {
//说明:由于后台系统的账号在后面会由【权限管家】系统中管理,由于【权限管家】目前还没学习,所以这里的登录先做【模拟实现】
if (!(StrUtil.equals(account, "shenlingadmin") && StrUtil.equals(password, "123456"))) {
return R.error("用户名或密码错误");
}
LoginDTO loginDTO = new LoginDTO();
//设置token
Token token = new Token();
token.setToken("eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxMDI0NzA1NzA5MjU1NzczMzQ1IiwiYWNjb3VudCI6InNoZW5saW5nYWRtaW4iLCJuYW1lIjoi56We6aKG566h55CG5ZGYIiwib3JnaWQiOjEwMjQ3MDQ4NDQ0ODY3NTY2NDEsInN0YXRpb25pZCI6MTAyNDcwNTQ4OTQzNjQ5NDcyMSwiYWRtaW5pc3RyYXRvciI6ZmFsc2UsImV4cCI6MTY4MDc5NjE5OX0.W4RrB4p5YmjgEcdyGbbL4UrdWFirFbUu_e8Pgwxgr6vBVnj5z40JcFG4X3nIbrIXcSXUldi6oEuNfqAtZ9dUUw");
token.setExpire(9999);
loginDTO.setToken(token);
//设置用户信息
UserDTO userDTO = new UserDTO();
userDTO.setAccount(account);
userDTO.setName("神领管理员");
//其它属性暂时不设置
loginDTO.setUser(userDTO);
return R.success(loginDTO);
}
在Controller中调用:
/**
* 管理端登录
*
* @param login 登录信息
* @return 用户信息
*/
@PostMapping(value = "/login")
@ApiOperation(value = "登录", notes = "登录")
public R<LoginDTO> login(@RequestBody LoginParamDTO login) {
return this.authService.login(login);
}
3.4.3、测试
基于swagger接口进行测试:


基于前端测试:


说明:
基于前端测试目前只能测试登录接口,在登录成功后还无法正常进入后台首页,原因是在com.sl.ms.web.manager.config.ManagerWebConfig中配置了com.sl.transport.common.interceptor.UserInterceptor拦截器,这个拦截器是对请求是否来源于网关的校验,而目前我们还没有网关,所以暂时先不测试成功跳转首页。