springboot-gulimall-d13
上一级页面:springboot-gulimall
前言
这一节,增加了许多与安全性有关的操作,比如增加鉴权,更改密码,使用环境变量而不是明文,初学者可以跳过这章。
如果你本地电脑的配置不足,那么你可能需要把部署相关的内容都放到远程服务器上
部署nacos到服务器
首先把我们之前本地的nacos打包压缩,
上传服务器,解压到服务器的文件夹
通过命令启动nacos
启动nacos-server
较新版本的nacos默认使用集群模式启动,我们本地开发调试使用standlone 单机模式启动即可,并且单机也无法正常启动集群模式。命令如下
# 去nacos/bin/ 目录下
startup.cmd -m standalone
startup.sh -m standalone
开启鉴权
参照官方文档的说法Authorization (nacos.io)
首先开启鉴权
### If turn on auth system: nacos.core.auth.system.type=nacos nacos.core.auth.enabled=true
然后必须手动设置一个密钥
### The default token(Base64 String): nacos.core.auth.default.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
注意原始密码里面不能有=
等特殊字符。
具体做法是,先用密码生成器生成一个原始密码,
然后打开在线base64编码网址:Base64 编码/解码 - 在线工具 (toolhelper.cn)
![Pasted image 20230807222105.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20230807222105.png)
把生成的这串base64字符串填进去就行了
然后还建议设置这几项
### Since 1.4.1, Turn on/off white auth for user-agent: nacos-server, only for upgrade from old version.
nacos.core.auth.enable.userAgentAuthWhite=false
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
nacos.core.auth.server.identity.key=lqaasd
nacos.core.auth.server.identity.value=wdsaa
注意这里的key 和value 都是必填的,不是登录的用户名和密码,别整错了
更改默认的用户名和密码
新建一个java项目,以生成密钥
nacos使用的编码器是 spring-boot-security提供的 BCryptPasswordEncoder
。我们自己生成密钥也通过一样的方式来生成就可以了。具体过程如下
随便新建一个 springboot 项目
在pom.xml中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
新建一个类,随便起名字,内容如下 :
public static void main(String[] args) {
System.out.println(new BCryptPasswordEncoder().encode("mynacosPassword"));
}
把mynacosPassword
替换成你需要的密码,运行就可以得到加密后的密码
启用nacos的mysql数据库
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
# spring.datasource.platform=mysql
spring.sql.init.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos
注意这里的 nacos_config
是数据库名
创建mysql数据,在数据库插入数据
创建一个数据库 nacos_config , 导入nacos提供的数据库脚本。
在mysql里执行查询,导入nacos 提供的sql文件,旧版本是nacos/conf/nacos-mysql.sql
。新版本是nacos/conf/mysql-schema.sql
打开数据库管理软件,在user表里插入一条数据
![Pasted image 20230807223321.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20230807223321.png)
INSERT into users(username,`password`,enabled)
VALUES('username1',"pwd",'1')
把对应字段替换成实际的用户名和密码
设置用户角色
刚刚插入的用户是没有权限的
INSERT into roles
VALUES('userna','ROLE_ADMIN')
关闭默认用户
为了安全起见,把默认用户给关掉
UPDATE users
set enabled = 0
WHERE username ='nacos'
更改项目配置,使用环境变量
修改模块的配置文件,更改发现中心的配置 gulimall-coupon/src/main/resources/application.yaml
spring:
cloud:
nacos:
# 发现中心
discovery:
# 设置nacos服务器地址
server-addr: ${nacosAddr}:${nacosPort}
# 设置发现中心的用户密码
username: ${nacosUserName}
password: ${nacosPassword}
# 指定应用名称,nacos会读取这个
application:
name: gulimall-coupon
设置配置中心 gulimall-coupon/src/main/resources/bootstrap.properties
spring.application.name=gulimall-coupon
# 设置服务器地址
spring.cloud.nacos.config.server-addr=${nacosAddr}:${nacosPort}
spring.cloud.nacos.config.username=${nacosUserName}
spring.cloud.nacos.config.password=${nacosPassword}
设置IDE环境变量
找到模块的主人口,右键运行按钮,点击修改运行配置
![Pasted image 20230807230253.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20230807230253.png)
多个环境变量用分号隔开
![Pasted image 20230807230437.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20230807230437.png)
使用一个不签入git的隐私配置文件(推荐)
也可以选择新建一个密码配置文件,这种方式可以实现类似ide环境变量的功能
运行
运行当前模块,可以成功启动,就没问题了
在nacos里添加数据源等配置
首先配置项目的配置文件 .gulimall-coupon/src/main/resources/bootstrap.properties
配置默认文件的命名空间、分组等内容
spring.application.name=gulimall-coupon
# 设置命名空间和分组(应用名 和 环境名,例如 gulimall-coupon的Id 和 dev )
spring.cloud.nacos.config.namespace=1caa0f46-5cb5-43c9-a7ce-8f26ebcce7dd
spring.cloud.nacos.config.group=dev
同上,在nacos里添加要迁移到服务器上的那些工具的配置。例如mysql等
![Pasted image 20230807231647.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20230807231647.png)
更改默认配置文件为使用yaml(可选)
修改配置文件
spring.application.name=gulimall-coupon
# 指明文件后缀
spring.cloud.nacos.config.file-extension=yaml
新建应用名.yaml的配置文件。配置格式选择yaml
![Pasted image 20230807234055.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20230807234055.png)
测试mysql 数据库
在sms_coupon
里面插入一条数据,
INSERT INTO gulimall_sms.sms_coupon
(coupon_type, coupon_img, coupon_name, num, amount, per_limit, min_point, start_time, end_time, use_type, note, publish_count, use_count, receive_count, enable_start_time, enable_end_time, code, member_level, publish)
VALUES(1, '1', 'testCoupon', 1, 3.0000, 3, 1.0000, '2023-10-31 08:00:00.0', '2023-10-31 20:00:00.0', 0, '123', 0, 0, 0, NULL, NULL, NULL, NULL, NULL);
然后访问网址localhost:7000/coupon/coupon/info/1
![Pasted image 20230807235626.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20230807235626.png)
接下来
在下一节之前,我把其他的软件,比如 mysql redis docker 等等都配置在服务器上,他们的配置与之前学习的内容相同,不再赘述。
![Pasted image 20231031222713.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20231031222713.png)