【项目】小帽学堂(十八)
小帽学堂
二十九、Spring Security
1. Spring Security介绍
1.1 框架介绍
- Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。
(1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
(2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。 - Spring Security其实就是用filter,多请求的路径进行过滤。
(1)如果是基于Session,那么Spring-security会对cookie里的sessionid进行解析,找到服务器存储的sesion信息,然后判断当前用户是否符合请求的要求。
(2)如果是token,则是解析出token,然后将当前请求加入到Spring-security管理的权限信息中去。
1.2 认证与授权实现思路
- 如果系统的模块众多,每个模块都需要就行授权与认证,所以我们选择基于token的形式进行授权与认证,用户根据用户名密码认证成功,然后获取当前用户角色的一系列权限值,并以用户名为key,权限列表为value的形式存入redis缓存中,根据用户名相关信息生成token返回,浏览器将token记录到cookie中,每次调用api接口都默认将token携带到header请求头中,Spring-security解析header头获取token信息,解析token获取当前用户名,根据用户名就可以从redis中获取权限列表,这样Spring-security就能够判断当前请求是否有权限访问。

1.3 总结
- Spring Security主要包含有两部分:用户认证 和 用户授权
(1)用户认证:
进入用户登录时候,输入用户名和密码,查询数据库,输入用户名和密码是否正确,如果正确的话,认证成功了
(2)用户授权:
登录了系统,登录用户可能是不同的角色,比如现在登录的用户是管理员,管理员操作所有功能,比如登录用户普通用户,操作功能肯定比管理员少很多 - Spring Security本质上就是过滤器Filter,对请求进行过滤
2. 整合Spring Security
2.1 在common下创建spring_security模块

2.2 在spring_security引入相关依赖
<dependencies><dependency><groupId>com.alexgroupId><artifactId>common_utilsartifactId><version>0.0.1-SNAPSHOTversion>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-securityartifactId>dependency><dependency><groupId>io.jsonwebtokengroupId><artifactId>jjwtartifactId>dependency>
dependencies>

2.3 在service_acl引入spring_security依赖
<dependencies><dependency><groupId>com.alexgroupId><artifactId>spring_securityartifactId><version>0.0.1-SNAPSHOTversion>dependency><dependency><groupId>com.alibabagroupId><artifactId>fastjsonartifactId>dependency>
dependencies>

三十、Nacos 配置中心
1. Nacos 配置中心介绍

1.1 Spring Cloud Config
- Spring Cloud Config 为分布式系统的外部配置提供了服务端和客户端的支持方案。在配置的服务端您可以在所有环境中为应用程序管理外部属性的中心位置。客户端和服务端概念上的Spring Environment 和 PropertySource 抽象保持同步, 它们非常适合Spring应用程序,但是可以与任何语言中运行的应用程序一起使用。当应用程序在部署管道中从一个开发到测试直至进入生产时,您可以管理这些环境之间的配置,并确保应用程序在迁移时具有它们需要运行的所有内容。服务器存储后端的默认实现使用git,因此它很容易支持标记版本的配置环境,并且能够被管理内容的各种工具访问。很容易添加替代的实现,并用Spring配置将它们插入。
- Spring Cloud Config 包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件,默认情况下使用git。
1.2 Nacos替换Config
- Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
- 应用场景
- 在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。
- 如果微服务架构中没有使用统一配置中心时,所存在的问题:
- 配置文件分散在各个项目里,不方便维护
- 配置内容安全与权限
- 更新配置后,项目需要重启
- nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。
2. 读取Nacos配置中心的配置文件
2.1 在Nacos创建统一配置文件
2.1.1 点击创建按钮

2.1.2 输入配置信息

- Data ID 的完整规则格式如下
- ${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默认为所属工程配置spring.application.name 的值(即:nacos-provider),也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
- spring.profiles.active=dev 即为当前环境对应的 profile。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
- file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
2.2 以service-statistics模块为例
2.2.1 在service中引入依赖
<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
2.2.2 创建bootstrap.properties配置文件
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#spring.profiles.active=dev# 该配置影响统一配置中心中的dataId
spring.application.name=service-statistics
2.2.3 把项目之前的application.properties内容注释,启动项目查看效果
2.3 补充:springboot配置文件加载顺序

- 其实yml和properties文件是一样的原理,且一个项目上要么yml或者properties,二选一的存在。推荐使用yml,更简洁。
- bootstrap与application
- 加载顺序
- 这里主要是说明application和bootstrap的加载顺序。
- bootstrap.yml(bootstrap.properties)先加载
- application.yml(application.properties)后加载
- bootstrap.yml 用于应用程序上下文的引导阶段。
- bootstrap.yml 由父Spring ApplicationContext加载。
- 父ApplicationContext 被加载到使用 application.yml 的之前。
- 配置区别
- bootstrap.yml 和application.yml 都可以用来配置参数。
- bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
- application.yml 可以用来定义应用级别的。
- 加载顺序
3. 名称空间切换环境
- 在实际开发中,通常有多套不同的环境(默认只有public),那么这个时候可以根据指定的环境来创建不同的 namespce,例如,开发、测试和生产三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的 namespace。以此来实现多环境的隔离。
3.1 创建命名空间

- 默认只有public,新建了dev、test和prod命名空间

3.2 克隆配置
(1)切换到配置列表:

- 可以发现有四个名称空间:public(默认)以及我们自己添加的3个名称空间(prod、dev、test),可以点击查看每个名称空间下的配置文件,当然现在只有public下有一个配置。
- 默认情况下,项目会到public下找 服务名.properties文件。
- 接下来,在dev名称空间中也添加一个nacos-provider.properties配置。这时有两种方式:
- 第一,切换到dev名称空间,添加一个新的配置文件。缺点:每个环境都要重复配置类似的项目
- 第二,直接通过clone方式添加配置,并修改即可。推荐

- 点击编辑:修改配置内容,端口号改为8013以作区分

- 在项目模块中,修改bootstrap.properties添加如下配置
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.profiles.active=dev
# 该配置影响统一配置中心中的dataId,之前已经配置过
spring.application.name=service-statistics
spring.cloud.nacos.config.namespace=13b5c197-de5b-47e7-9903-ec0538c9db01
- namespace的值为:

- 重启服务提供方服务,测试修改之后是否生效
4. 多配置文件加载
- 在一些情况下需要加载多个配置文件。假如现在dev名称空间下有三个配置文件:service-statistics.properties、redis.properties、jdbc.properties

- 添加配置,加载多个配置文件
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.profiles.active=dev
# 该配置影响统一配置中心中的dataId,之前已经配置过
spring.application.name=service-statistics
spring.cloud.nacos.config.namespace=13b5c197-de5b-47e7-9903-ec0538c9db01
spring.cloud.nacos.config.ext-config[0].data-id=redis.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=jdbc.properties
spring.cloud.nacos.config.ext-config[1].refresh=true
三十一、远程 Git 仓库
1. 提交过程

2. 用Git远程仓库使用码云
- 第一步 进入码云官方网站,注册用户 https://gitee.com
- 第二步 创建远程仓库
- 点击右上角的 + 号进行创建

- 填写仓库信息


- 看到创建成功的仓库


- 点击右上角的 + 号进行创建
3. Git仓库(提交代码)
3.1 准备工作:安装git
- 在idea配置git环境

3.2 创建本地git仓库
- 选择创建本地git仓库

- 选择当前项目目录作为本地git仓库目录

- 创建成功,代码颜色变化

3.3 右键点击项目,选择Git,添加项目代码到本地库

- 选择Git里面Add,添加代码到本地库

3.4 设置远程Git仓库地址

- 设置码云地址

- 点击OK,连接码云远程Git仓库,输入码云用户名和密码(第一次需要输入,后面可以保存,之后不需要再输入了)
3.5 把本地Git库内容,添加码云远程Git库






- 点击Push就可以了

4. Git操作远程库(细节)
4.1 在码云创建仓库时候,不要选择下面内容

4.2 如果保存输入码云用户名和密码,如何删除?



4.3 让本地代码和远程库断开连接

- 找到项目文件夹,删除文件夹.git

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
