- 博客(201)
- 收藏
- 关注
原创 Spring Secuirty Oauth2实现SSO
Spring Secuirty Oauth2实现SSO单系统登录机制 single sign onhttp无状态协议web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系。但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求
2021-01-24 20:16:14
811
原创 JWT
JWT常见的认证机制HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用HTTP Basic Auth。Cookie AuthCookie认证机制就是为一次请求认证在服务端创
2021-01-24 20:10:55
547
原创 OAuth2.0原理分析
OAuth2.0原理分析授权服务器@EnableAuthorizationServer解析我们都知道 一个授权认证服务器最最核心的就是 @EnableAuthorizationServer , 那么 @EnableAuthorizationServer 主要做了什么呢? 我们看下 @EnableAuthorizationServer 源码:@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Impo
2021-01-24 20:05:10
835
原创 Spring Security OAuth2快速开始
Spring Security OAuth2快速开始授权服务器Authorize Endpoint :授权端点,进行授权Token Endpoint :令牌端点,经过授权拿到对应的TokenIntrospection Endpoint :校验端点,校验Token的合法性Revocation Endpoint :撤销端点,撤销授权整体架构流程:用户访问,此时没有Token。Oauth2RestTemplate会报错,这个报错信息会被 Oauth2ClientContextFilter
2021-01-24 20:02:46
298
1
原创 OAuth2.0概述
OAuth2.0概述OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三 方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版。OAuth协议:https://tools.ietf.org/html/rfc6749协议特点:简单:不管是OAuth服务提供者还是应用开发者,都很易于理解与使用;安全:没有涉及
2021-01-24 19:54:25
10580
1
原创 授权原理
授权原理在Spring Security权限框架里,若要对后端http接口实现权限受权控制,有两种实现方式。1、重写 #configure(HttpSecurity http) 方法,主要配置 URL 的权限控制@Overrideprotected void configure(HttpSecurity http) throws Exception { http // 配置请求地址的权限 .authorizeRequests()
2021-01-24 19:43:26
938
1
原创 用户授权
用户授权授权的方式包括 web授权和方法授权,web授权是通过 url拦截进行授权,方法授权是通过 方法拦截进行授权。他 们都会调用accessDecisionManager进行授权决策,若为web授权则拦截器为FilterSecurityInterceptor;若为方 法授权则拦截器为MethodSecurityInterceptor。如果同时通过web授权和方法授权则先执行web授权,再执行方 法授权,最后决策通过,则允许访问资源,否则将禁止访问。web授权Spring Security可以通过
2021-01-24 19:40:03
1115
原创 认证原理
认证原理Spring Security是如何完成身份认证的?用户名和密码被过滤器获取到,封装成 Authentication ,通常情况下是 UsernamePasswordAuthenticationToken 这个实现类。AuthenticationManager 身份管理器负责验证这个 Authentication认证成功后, AuthenticationManager 身份管理器返回一个被填充满了信息的(包括上面提到的 权限信息,身份信息,细节信息,但密码通常会被移除) Authentic
2021-01-24 15:59:48
283
原创 用户身份认证
用户身份认证spring security 简介 spring security 的核心功能主要包括:认证 (你是谁)授权 (你能干什么)攻击防护 (防止伪造身份) 其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。快速开始1、引入依赖<!-- 实现对 Spring Security 的自动化配置 -
2021-01-24 15:06:20
430
原创 sharding-jdbc教程
sharding-jdbc教程 Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。支持任何
2021-01-20 08:56:01
1516
1
原创 ShardingSphere介绍与使用
ShardingSphere的基本介绍1、什么是shardingSphere Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。 Apache ShardingSphere 定位为关系型数据库中间件,旨在充分合理地
2021-01-17 13:48:48
38507
1
原创 mysql的主从复制延迟问题
mysql的主从复制延迟问题 在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题。 主从复制的原理我们在此处就不再赘述了,之前已经讲过了,这是一个老生常谈的问题,原理性质的也几乎在面试中问烂了,这些原理性质的东西并不是很难,但是你需要注意了,主从复制的延迟问题会成为一个难点,能非常全面的考验同学们的技术实力。1、如何查看同步延迟状态? 在从服务器上通过 show slave status
2021-01-17 13:42:28
451
原创 mycat的高阶使用
mycat的高阶使用1、mycat的高可用 在之前的操作中,我们已经实现了mysql机器的高可用,可以动态切换master,那么如果mycat崩溃了呢?我们应该如何处理呢?所以此时就需要搭建mycat的高可用集群了。 在mycat的权威指南中,介绍了多种高可用的方案,在这里我们讲解一种使用最多的方案,使用HAProxy+Keepalived配合使用来实现myact的高可用。 HAproxy实现了mycat多借点的集群高可用和负载均衡,而HAProxy自身的高可用则可以通过Keepaliv
2021-01-17 13:39:51
207
原创 mycat分库分表实战
mycat分库分表实战 之前我们已经讲解过了数据的切分,主要有两种方式,分别是垂直切分和水平切分,所谓的垂直切分就是将不同的表分布在不同的数据库实例中,而水平切分指的是将一张表的数据按照不同的切分规则切分在不同实例的相同名称的表中。 下面先来描述mycat的分库操作,在进行分库操作的时候需要注意一点:有关联关系的表应该放在一个库里,相互没有关联关系的表可以分到不同的库中。 数据文件--客户表 CREATE TABLE customer(id INT AUTO_INCREMENT,N
2021-01-17 13:39:10
512
原创 mycat的安装及使用
2、mycat的安装及使用1、mycat的安装1、环境准备 本次课程使用的虚拟机环境是centos6.5 首先准备四台虚拟机,安装好mysql,方便后续做读写分离和主从复制。192.168.85.111 node01192.168.85.112 node02192.168.85.113 node03192.168.85.114 node04 安装jdk 使用rpm的方式直接安装jdk,配置好具体的环境变量2、mycat的安装 从官网下载需要的安装包,并且上传到具
2021-01-17 13:37:16
170
原创 mycat的基本介绍及安装
1、mycat的基本介绍及安装1、前置知识1、分布式系统 分布式系统是指其组件分布在网络上,组件之间通过传递消息进行通信和动作协调的系统。它的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的额任务。它的特点是: 透明性:分布式系统对于用户是透明的,一个分布式系统在用户面前的表现就像一个传统的单处理机分时系统,可用用户不必了解其内部结构就能使用; 扩展性:分布式系统的最大特点是可扩展性,它能够根据需求的增加而扩展,可以通过横向扩展使集群的整体性能得
2021-01-17 13:25:18
362
原创 使用amoeba实现mysql读写分离
使用amoeba实现mysql读写分离1、什么是amoeba? Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。主要解决:• 降低 数据切分带来的复杂多数据库结构• 提供切分规则并降低 数据切分规则 给应用带来的影响• 降低db 与客户端的连接数• 读写分离2、为什么要用Amoeba目前要实现m
2021-01-17 13:21:09
135
1
原创 mysql读写分离
mysql读写分离1、读写分离的介绍 MySQL读写分离基本原理是让master数据库处理写操作,slave数据库处理读操作。master将写操作的变更同步到各个slave节点。 MySQL读写分离能提高系统性能的原因在于: 1、物理服务器增加,机器处理能力提升。拿硬件换性能。 2、主从只负责各自的读和写,极大程度缓解X锁和S锁争用。 3、slave可以配置myiasm引擎,提升查询性能以及节约系统开销。 4、master直接写是并发的,slave通过主库发
2021-01-17 13:20:17
109
原创 mysql主从复制安装配置
mysql主从复制安装配置1、基础设置准备#操作系统:centos6.5#mysql版本:5.7#两台虚拟机:node1:192.168.85.111(主)node2:192.168.85.112(从)2、安装mysql数据库#详细安装和卸载的步骤参考对应的文档3、在两台数据库中分别创建数据库--注意两台必须全部执行create database msb;4、在主(node1)服务器进行如下配置:#修改配置文件,执行以下命令打开mysql配置文件vi /etc/my.c
2021-01-17 13:18:05
137
原创 mysql主从复制原理
mysql主从复制原理0、为什么需要主从复制?1、在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。2、做数据的热备3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。1、什么是mysql的主从复制? MySQL 主从复制是指数据可以从一个
2021-01-17 13:16:48
120
原创 服务器参数设置
服务器参数设置通用参数(general)参数配置参数含义datadir=/var/lib/mysql数据文件存放的目录socket=/var/lib/mysql/mysql.sockmysql.socket表示server和client在同一台服务器,并且使用localhost进行连接,就会使用socket进行连接pid_file=/var/lib/mysql/mysql.pid存储mysql的pidport=3306mysql服务的端口号defaul
2021-01-06 12:21:02
395
原创 分区表
区分表对于用户而言,分区表是一个独立的逻辑表,但是底层是由多个物理子表组成。分区表对于用户而言是一个完全封装底层实现的黑盒子,对用户而言是透明的,从文件系统中可以看到多个使用#分隔命名的表文件。mysql在创建表时使用partition by子句定义每个分区存放的数据,在执行查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询就无须扫描所有分区。分区的主要目的是将数据安好一个较粗的力度分在不同的表中,这样可以将相关的数据存放在一起。官网文档:https://dev.mysql.c
2021-01-06 12:13:28
1271
原创 查询优化
查询优化查询慢的原因在尝试编写快速的查询之前,需要清楚一点,真正重要是响应时间。如果把查询看作是一个任务,那么他由一系列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行的次数,要么让子任务运行得更快。MySQL在执行查询的时候有哪些子任务。哪些子任务运行的速度很慢,这里很难给出完整的列表,通常来说查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后再服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中“执行”
2021-01-06 08:50:15
204
原创 通过索引进行优化
通过索引进行优化索引基本知识索引的优点1、大大减少了服务器需要扫描的数据量2、帮助服务器避免排序和临时表3、将随机io变成顺序io索引的用处快速查找匹配WHERE子句的行从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引如果表具有多列索引,则优化器可以使用索引的任何最左前缀来查找行当有表连接的时候,从其他表检索行数据查找特定索引列的min或max值如果排序或分组时在可用索引的最左前缀上完成的,则对表进行排
2021-01-06 08:46:52
489
原创 Schema与数据类型优化
schema与数据类型优化数据类型的优化更小的通常更好应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少,但是要确保没有低估需要存储的值的范围,如果无法确认哪个数据类型,就选择你认为不会超过范围的最小类型案例:设计两张表,设计不同的数据类型,查看表的容量查看mysql库各表容量大小:selecttable_schema as '数据库',table_name as '表名',table_rows a
2021-01-06 08:42:14
98
原创 MySQL 执行计划
mysql执行计划 在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。 可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。 官网地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html1、执行计划中包含的信息ColumnMeaningidThe SELE
2021-01-06 08:39:05
82
原创 MYSQL performance schema详解
MYSQL performance schema详解0、performance_schema的介绍 MySQL的performance schema 用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况。 特点如下: 1、提供了一种在数据库运行时实时检查server的内部执行情况的方法。performance_schema 数据库中的表使用performance_schema存储引擎。该数据库主要关注数据库运行过程中的性能相关的数据,与informatio
2021-01-06 08:38:38
158
原创 MySQL 的锁机制
MySQL 的锁机制1、MySQL锁的基本介绍 **锁是计算机协调多个进程或线程并发访问某一资源的机制。**在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。 相对其他数据库而言,MySQL的锁机制比较简单,其最 显著的特点是不同的存储引擎支持不同的锁机制。比如,My
2021-01-02 11:45:41
97
原创 MySQL 的索引机制
MySQL 的索引基础什么是索引的索引是为了加速对表中数据行的检索而创建的一种分散存储的(不连续的)数据结构,硬盘级的。索引意义:索引能极大的减少存储引擎需要扫描的数据量,索引可以把随机IO变成顺序IO。索引可以帮助我们在进行分组、排序等操作时,避免使用临时表。正确的创建合适的索引是提升数据库查询性能的基础。为什么选择B+Treehash表索引结构缺点:利用hash存储的话,需要将所有的数据文件添加到内存,比较耗费内存空间如果所有的查询都是等值查询,那么hash确实快,但是在企业或者实际
2021-01-02 11:44:40
106
原创 MySQL 事务测试
mysql事务测试1、打开mysql的命令行,将自动提交事务给关闭--查看是否是自动提交 1表示开启,0表示关闭select @@autocommit;--设置关闭set autocommit = 0;2、数据准备--创建数据库create database tran;--切换数据库 两个窗口都执行use tran;--准备数据 create table psn(id int primary key,name varchar(10)) engine=innodb;--插入数据i
2021-01-02 11:41:01
92
原创 MySQL 的事物管理
MySQL 的事物管理原理事务的特性原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏隔离性:数据库允许多个并发事务同时对数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失隔离级别读未提交:一个事务还没提
2021-01-02 11:38:33
139
原创 MySQL 的基础架构及日志实现
MySQL 的基础架构及日志实现Mysql 的基本架构图MySQL可以分为Server层和存储引擎层两部分Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等存储引擎负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开
2021-01-02 11:29:21
123
原创 MYSQL5.7详细安装步骤
MYSQL5.7详细安装步骤:0、更换yum源1、打开 mirrors.aliyun.com,选择centos的系统,点击帮助2、执行命令:yum install wget -y3、改变某些文件的名称mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup4、执行更换yum源的命令wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.a
2021-01-02 11:24:55
152
原创 Linux下mysql5.7的彻底卸载
Linux下mysql的彻底卸载1、查看mysql的安装情况rpm -qa | grep -i mysql2、删除上图安装的软件rpm -ev mysql-community-libs-5.7.27-1.el6.x86_64 --nodeps3、都删除成功之后,查找相关的mysql的文件find / -name mysql4、删除全部文件rm -rf /var/lib/mysqlrm -rf /var/lib/mysql/mysqlrm -rf /etc/logrotate.d
2021-01-02 11:19:23
503
原创 MyBatis 插件机制
MyBatis 插件机制我们应该了解MyBatis 允许哪些对象的哪些方法允许被拦截,并不是每一个运行的节点都是可以被修改的。只有清楚了这些对象的方法的作用,当我们自己编写插件的时候才知道从哪里去拦截。MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor 上层的对象,SQL 执行全过程,包括组装参数,组装结果集返回和执行SQL 过程(update, query, flushStatements, commit,
2020-12-25 07:56:46
115
原创 MyBatis 缓存机制
MyBatis 缓存机制缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力。跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口。MyBatis 跟缓存相关的类都在cache 包里面,其中有一个Cache 接口,只有一个默认的实现类PerpetualCache,它是用HashMap 实现的。除此之外,还有很多的装饰器,通过这些装饰器可以额外实现很多的功能:回收策略、日志记录、定时刷新等等。所有的缓存实现类总体上可分为三类:基本
2020-12-25 07:55:14
85
原创 MyBatis SQL执行过程
MyBatis SQL执行过程在单独使用 MyBatis 进行数据库操作时,我们通常都会先调用 SqlSession 接口的 getMapper 方法为我们的 Mapper 接口生成实现类。然后就可以通过 Mapper 进行数据库操作调用入口public <T> T getMapper(Class<T> type) { return configuration.<T>getMapper(type, this);}// -☆- Configuration
2020-12-25 07:54:02
174
原创 MyBatis 映射文件解析
MyBatis 映射文件解析概述MyBatis 的配置文件由 XMLConfigBuilder 的 parseConfiguration 进行解析,该方法依次解析了 、、 等节点。至于 节点,parseConfiguration 则是在方法的结尾对其进行了解析。该部分的解析逻辑封装在 mapperElement 方法中,下面来看一下:private void mapperElement(XNode parent) throws Exception { if (parent != null)
2020-12-25 07:51:35
196
原创 MyBatis 配置文件解析
MyBatis 配置文件解析传统JDBC弊端1、jdbc底层没有用连接池、操作数据库需要频繁的创建和关联链接。消耗很大的资源2、写原生的jdbc代码在java中,一旦我们要修改sql的话,java需要整体编译,不利于系统维护3、使用PreparedStatement预编译的话对变量进行设置123数字,这样的序号不利于维护4、返回result结果集也需要硬编码。ORM框架Mybatis介绍MyBatis is a first class persistence framework with su
2020-12-25 07:50:28
171
原创 SpringBoot 启动流程
SpringApplication类构造器public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.resourceLoader = resourceLoader;//此时为null,可以通过此参数指定类加载器 Assert.notNull(primarySources, "PrimarySources must not be null"); t
2020-12-19 16:12:15
135
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人