自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

欢谷悠扬

不为追寻别人的脚步,只想看到每天进步的人生.

  • 博客(102)
  • 资源 (1)
  • 收藏
  • 关注

原创 【springboot笔记】程序可用性检测ApplicationAvailability

理解AvailabilityState的两个状态管理与运用

2023-11-18 17:28:55 423

原创 【nginx】(13: Permission denied) while connecting to upstream

nginx请求转发被selinux拦截问题处理

2023-09-18 17:33:52 657

原创 实时监听nacos中的服务上下线

基于InstancesChangeEvent的监听实现nacos服务实时上下线感知

2023-04-03 16:00:19 3530 1

原创 基于RouteDefinitionRepository实现基于mysql的路由声明加载

路由声明缓存器基于组合模式的管理其他的RouteDefinitionLocator实现类基于配置的路由声明加载器基于jvm内存的路由声明加载器,可以通过接口对缓存在内存中的路由声明进行新增和删除。基于redis的路由声明加载器,可以通过接口对缓存在redis中的路由声明进行增删。基于服务发现的路由声明加载器,默认是以作为Path断言的前缀来实现路由的。通过进行路由声明加载,然后缓存在自己的容器中。里面管理着通过实现接口,来实现基于mysql路由声明加载器。/**

2023-03-14 20:45:52 997 1

原创 redis源码之set命令解析(8)

1.背景源码是redis5版本,在笔记7中,找到了命令数组redisCommandTable先从最简单的set命令开始看,如何进行最简单的键值对进行set。2.setCommandsetCommand命令实现是在t_string.c文件中。这里主要是处理set if exist ,set if not exist,set expire 这三种情况。另外对set命令的value进行redisObject 对象构建。/* SET key value [NX] [XX] [EX <seco

2022-05-21 19:11:28 614

原创 域名被ServerHold处理方案

1.背景在GoDaddy注册商注册的域名在阿里云上进行DNS解析时出现了运行异常,然后去GoDaddy上检查与咨询域名并无异常。通过whois查询发现域名出现了(注册局设置暂停解析(server Hold))申请的是顶级域名fun下的域名我的是误杀,并不是未实名,也不是滥用域名(才注册的)2.解决方案首先需要找你你所使用的顶级域名fun所在的注册局,fun所在的注册局为https://radix.website访问ABOUT下的CONTACT,并选择Suspended Doma

2022-05-18 16:13:04 1527

原创 redis源码之server接受客户端请求并处理(7)

1.处理客户端请求在server.c 的main方法中,在启动的时候针对网卡的各个ip会创建文件事件用于监听tcp请求。tcp请求会交给acceptTcpHandler去处理。而readQueryFromClient就是用来处理文件读事件处理的。对于做java的人来说,其实跟netty里对于连接事件,读事件,写事件监听与处理的模式一样。2.处理读事件readQueryFromClient方法所在地:networking.c文件中的readQueryFromClient方法处理流程:nre

2022-05-11 21:50:02 431

原创 redis客户端启动与交互简要分析(6)

上图1.redis客户端启动主流程分析目前研读的代码是redis5.0,启动流程在redis-cli.c的main函数中先列一下main函数中,我认为比较重要的函数main(){ // 客户端默认配置设置 config.hostip = sdsnew("127.0.0.1"); .... // 2.解析命令行携带的参数 firstarg = parseOptions(argc,argv); // 3. 针对不同的模式进行处理 CLUSTER_MANAGER_MODE() c

2022-05-11 18:51:49 466

原创 redis源码之RESP协议格式组装(5)

背景在我们在通过redis-cli启动交互界面时,在界面输入的set key1 value1这种命令会被redis-cli转化为特定的格式传给redis-server。这个格式就是RESP协议。基本格式*参数数量\r\n$参数长度\r\n参数\r\n$参数长度\r\n参数\r\n//比如:原始命令:set key1 value1RESP命令:*3\r\n$4\r\nset\r\n$4\r\nkey1\r\n$6\r\nvalue1\r\n解析:*3\r\n //总共3个字符串$3\

2022-05-11 16:59:15 307

原创 源码解析之sds小结(4)

背景本次阅读的版本是redis5.0,sds共分为5种数据结构,sdshdr5,sdshdr8,sdshdr16,sdshdr32,sdshdr64。阅读主要的源码文件为sds.h和sds.c ,作为redis对字符串封装的结构体,它在内存控制,二进制安全,快速读取,字符串变长方面表现更好。缺点:占用更多的内存空间,毕竟有头信息的存在。1.sds基本结构从上图可以看出,其基本结构可以大致分为:头信息部分:字符串总长度:alloc字符串已使用长度:len字符串类型标识:flag字符串

2022-05-06 20:51:26 401

原创 redis源码之sds扩容

redis之sds扩容处理

2022-05-06 16:01:15 1098 2

原创 redis之sds对象创建

分类的意义在于空间精细分配,同时保留自由空间扩容。数据长度的作用是快速获取字符串并对二进制友好。

2022-05-05 21:29:04 278

原创 redis server服务端启动流程分析(一)

redis server启动源码解析

2022-04-06 22:21:20 1996

原创 netty-server之NioEventLoopGroup初始化(一)

1.NioEventLoopGroup的继承体系图可以看到EventExecutorGroup是继承自ScheduleExecutorService 和 Iterable这就意味着存在线程池和迭代器,那么NioEventLoopGroup是对线程池做了什么,迭代器又在迭代什么?往下瞅瞅~2. EventExecutorGroup 核心接口功能描述EventExecutorGroup作为核心接口,定义了基本的核心功能。那么它是干啥的呢?官方解释:EventExecutorGroup负责通过自

2021-08-03 12:22:36 295 2

原创 Feign之远程JDK代理对象请求发送链路追踪(三)

1.前言从第一篇和第二篇中,可以看到Feign最终会为每个带有@FeignClient注解的interface生成一个JDK代理对象。那么在在通过feign进行远程调用时,一定会走到这个类的invoke方法中去。所以接下来我们探究一下invoke方法究竟在干什么~~2.FeignInvocationHandler的invoke方法@Override public Object invoke(Object proxy, Method method, Object[] args) throw

2021-07-23 16:54:36 382 1

原创 Feign基于注解@EnableFeignClients的JDK动态代理对象创建流程(二)

1.说明这是对上一篇文章的绘图总结,大致内容为基于@EnableFeignClients如何推导到每个被@FeignClient注解的接口的JDK代理对象的创建过程。这里面涉及到两个Spring的组件:一个是ClassPathScanningCandidateComponentProvider,专门进行包扫描,然后根据注解类型进行过滤并生成对应的BeanDefinition的组件扫描器还有一个是FactoryBeanRegistrySupport,这个专门对FacotryBean的子类进行getOb

2021-07-21 11:22:21 277

原创 Feign之EnableFeignClients引发的初步探索(一)

背景(可以略过的废话)前段时间一个朋友在做spring security相关配置时遇到一些问题,请我帮忙解决一些问题,由于我自身并没有使用过security,所以花了一段时间去学习spring security的使用和解析了一下spring security源码。时至今日,终于可以再次重新开始学习spring cloud相关的内容了~1.@EnableFeignClients注解的默认配置1.1 basePackages扫描@FeignClient注解的包路径,扫描这些包下的所有类,获取被@F

2021-07-20 20:28:46 5412 2

原创 SpringSecurity过滤器链涉及组件绘图总结(十五)

1.请求到SpringSecurity过滤器流程汇总图1.请求发送到服务器端口,被tomcat监听到并转化为request,response2.请求在tomcat中进入过滤器链ApplicationFilterChain3.进入过滤器DelegatingFilterProxy(SpringSecurity创建并注入到过滤器链)4.通过DelegatingFilterProxy持有的bean名称,从Spring容器中获取FilterChainProxy5.FilterChainProxy 持有多条过

2021-07-16 14:34:00 655 4

原创 Spring Security默认过滤器链之FilterSecurityInterceptor(十四)

1.作用这个主要是针对http请求进行权限校验权限校验需要注意的几点:1.用户需要先认证2.获取资源所需授权3.获取用户被授权信息4.授权校验5.授权成功处理6.授权失败处理2.直接开撸2.1 参数封装public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 先构建了一

2021-07-15 16:35:20 844 1

原创 Spring Security默认拦截器链解析(十三)

1.SessionManagementFilter 会话管理器见名知意,会话管理器。主要是管理SecurityContext到会话中去。主要内容:1.防止重复执行2.sessionAuthenticationStrategy session认证处理策略sessionAuthenticationStrategy主要是用于在非匿名身份认证时,可以自定义策略去对HttpSession进行相关操作。典型用途是确保会话存在或更改会话 ID 以防止会话固定攻击ChangeSessionIdAuthent

2021-07-14 14:17:59 1381 3

原创 Spring Security默认过滤器链解析(十二)

1.DefaultLoginPageGeneratingFilter 默认登录页生成从名字就可以看出,这是默认登录页生成过滤器。内容比较简单,就简单过一下。public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) r

2021-07-13 14:39:23 704 2

原创 SpringSecurity默认过滤器链之UsernamePasswordAuthenticationFilter

1.作用这个Filter是通过用户名和密码进行认证(登录)的。系统默认有三种认证Filter。ClientCredentialsTokenEndpointFilter: 基于oauth2 token的认证入口Oauth2ClientAuthenticationProcessingFilter:oauth2 客户端用于从授权服务器获取accessToken进行认证2.认证统一流程AbstractAuthenticationProcessingFilterpublic void doFilte

2021-07-12 19:18:55 1597 3

原创 SpringSecurity默认过滤器链解析之LogoutFilter(十)

1.LogoutFilter 退出登录处理器这个其实就是个专门处理退出登录请求的处理器, 默认的退出登录请求是/logout 。当然你也能自定义的。在继承WebSecurityConfigurerAdapter后重写configure(HttpSecurity http)方法,在这个方法里可以配置。至于如何配置,网上很多,我这里就不讲了~源码解析:public void doFilter(ServletRequest req, ServletResponse res, FilterChain c

2021-07-09 14:40:25 820 1

原创 Spring Security之默认的过滤器链的CsrfFilter(九)

1.什么是CsrfCSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。通俗的说,就是你用你浏览器缓存的认证信息和用户信息,通过另外一个钓鱼网站去访问你现

2021-07-09 14:09:55 550 2

原创 Spring Security之HeaderWriterFilter(八)

1.作用这个主要是个response写安全响应头信息的。默认主要包含五个头信息第一个:org.springframework.security.web.header.writers.XContentTypeOptionsHeaderWriter头信息:X-Content-Type-Options=nosniff 作用: 这个是帮助script 和 styleSheet 元素拒绝包含错误的 MIME 类型的响应。这是一种安全功能,有助于防止基于 MIME 类型混淆的攻击。第二个:org.spr

2021-07-08 15:32:41 1132 2

原创 Spring Security 之默认过滤器链的SecurityContextPersistenceFilter(七)

1.SecurityContextPersistenceFilter 是干啥的SecurityContextPersistenceFilter 是用来在认证之前从SecurityContextRepository获取SecurityContext,然后放入SecurityContextHolder中。在其他方法执行完毕之后,将SecurityContext 通过SecurityContextRepository存储到想要存储的地方,然后清理掉SecurityContextHolder中的Security

2021-07-08 14:20:19 411 2

原创 SpringSecurity之默认过滤器链的WebAsyncManagerIntegrationFilter(六)

1.背景在默认过滤器链中,总共有15个过滤器,它们每个都承载了不同的角色和功能。它的匹配也比较霸气是anyRequest。就是其他人都配不上的时候,我来接盘。2.WebAsyncManagerIntegrationFilter是干什么的?WebAsyncManager 是一个异步请求管理器,主要就是针对异步请求如何能和同步请求一样对一些数据进行处理。Spring Security在这里的WebAsyncManagerIntegrationFilter就是用来管理在异步请求中SecurityCon

2021-07-07 14:33:44 481 2

原创 Spring Security之SecurityFilterChain的选择与执行流程(五)

1.FilterChainProxy去找过滤器链去了~FilterChain 是过滤器链,我好像之前一直说的拦截器链(尴尬)在上一篇中,我们知道FilterChainProxy 拿到了三条过滤器链,那FilterChainProxy如何根据请求去选择呢?每个SecurityFilterChain都有一个RequestMatcher 匹配器,这个匹配器中可以放置多个url或者通配符表达式进行匹配,匹配成功就直接返回这个过滤器链的过滤器集合。所以SecurityFilterChain其实也不是过滤器

2021-07-07 11:08:49 1986 2

原创 Spring Security 之 DelegatingFilterProxy 到 FilterChainProxy完成 security 的安全接入(四)

1.重聊DelegatingFilterProxyRegistrationBean在前几篇中一直聊的一个东西就是将springSecurityFilterChain注入到servletContext容器中完成请求拦截。而注入的方式是通过DelegatingFilterProxyRegistrationBean来完成,这个类的主要目的是为了包装DelegatingFilterProxy 类,并且实现自动注入到servletContext的流程所以DelegatingFilterProxyRegistr

2021-07-06 14:25:17 922 4

原创 Spring security 之 tomcat到springSecurityFilterChain拦截器过程分析(三)

1.前景提要springSecurityFilterChain是一个DelegatingFilterProxyRegistrationBean的对象。在第二篇中,我们分析得知,spring security通过注入DelegatingFilterProxyRegistrationBean对象到spring 容器中来使 servlet 容器在初始化的过程中能够获取并初始化到自己的过滤器链中去。2.加入servlet 容器拦截器链中的springSecurityFilterChain如何运作这里

2021-07-05 14:54:21 998 5

原创 Spring Security之springSecurityFilterChain注册到sevlet的过程(二)

1.基于上帝视角的分析在上一篇中,分析了springSecurityFilterChain是在哪进行进行创建的,以及如何将这个bean注入到spring 容器中去。最后发现是通过spring-boot-autoconfigure.jar包中的org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration来完成的。springSecurityFilterChain这个在哪加入到servlet容器中的,其实

2021-07-03 18:38:46 813 1

原创 SpringSecurity源码解析之如何注入springSecurityFilterChain到servlet容器完成请求拦截(一)

1.官方文档解读在官方文档中告诉我们,当开启spring security 的默认配置时,spring security 会创建一个名为springSecurityFilterChain的bean来完成所有安全方面的功能。比如:应用程序url保护用户密码认证重定向登录界面登出接口上面都是些基本功能。那么springSecurityFilterChain 是在哪创建的呢?2. springSecurityFilterChain 的创建可以看到 springSecurityFil

2021-07-02 19:18:02 1039 2

原创 Ribbon之IRule 负载均衡策略详解

1.IRule家族2.RoundRobinRule 轮询策略2.1 核心方法解读private AtomicInteger nextServerCyclicCounter;public Server choose(ILoadBalancer lb, Object key) { if (lb == null) { log.warn("no load balancer"); return null; }

2021-06-16 14:29:17 1798

原创 Ribbon之ZoneAwareLoadBalancer及其父类做了些什么?

1.看看ZoneAwareLoadBalancer都做了些什么?这个类主要是跟Zone有关的,提供了跟zone有关的方法。但是在国内基本上用不上。eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS:region:可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再或者北京等等,没有具体大小的限制。根据项目具体的情况,可以自行合理划分region。zone:可以简单理解为region内的具体机房,比如说region划分为北京,然后北京有两个机房,就可以

2021-06-15 15:28:02 983

原创 Ribbon 如何获取默认的ZoneAwareLoadBalancer?

1.ILoadBalancer家族2.ZoneAwareLoadBalancer是在哪声明的呢?从前面几篇中可以看到我调试时使用的默认的LoadBalancer是ZoneAwareLoadBalancer,那它在哪声明的呢?在org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration 中至于RibbonClientConfiguration 如何加载的就细说了,在Ribbon自动注入时,有初始化一个SpringCli

2021-06-15 14:02:24 297

原创 Ribbon之LoadBalancerClient、ZoneAwareLoadBalancer 、ZoneAvoidanceRule默认三剑客

1.RibbonLoadBalancerClient之承上在ribbon中LoadBalanceClient 只有一个子类,这个子类就是RibbonLoadBalancerClient。它从LoadBalancerInterceptor接过请求,进入真正的负载均衡流程。2.RibbonLoadBalancerClient做了些啥?获取负载均衡器ILoadBalancer根据负载均衡器和规则选择服务(chooseServer)记录每个serviceId的状态 RibbonStatsRecor

2021-06-11 16:05:15 1290 1

原创 Ribbon如何拦截到restTemplate?(三)

1.LoadBalancerAutoConfiguration自动装配下的初始化上面这段代码主要做了两件事:初始化拦截器 LoadBalancerInterceptor初始化Restemplate定制化器RestTemplateCustomizer ,而这个东西就是用来将拦截器加入到restTemplate拦截器中去。2. 那何时使用了RestemplateCustomizer去初始化RestTemplate呢?这里其实看到这个返回类的时候有点懵逼,这个匿名类SmartInitiali

2021-06-10 20:09:11 393 1

原创 Ribbon 基于restTemplate如何处理请求大致流程(二)

1.背景在研究玩自动装配后,我搭了个demo,总共三个eureka server构成集群,然后两个服务提供者provider,一个consumer。在上一章简单了解自动装配的内容后,现在看看restTemplate是如何一步步走到ribbon的负载均衡器的。// 这里是直接处理了默认的restTemplate@Bean@LoadBalancedRestTemplate restTemplate(){ return new RestTemplate();}@GetMapping("/h

2021-06-10 16:43:27 366

原创 Ribbon之自动装配下ribbon做了些什么?(一)

1.前言在springboot的自动装配原理上,我们知道要使用一个组件,那么先去找spring.factories ,所以这里我们直接开始看spring-cloud-netflix-ribbon-2.1.0 的spring.factories 文件2.RibbonAutoConfiguration 源码简读@Configuration// 这个是判断条件的集合,只有RibbonClassesConditions里面的条件都满足了才能实例化这个配置类// 到spring 容器中去@Condit

2021-06-10 16:36:24 352

原创 eureka 源码解析用几张图收个尾

一、eureka server 与 eureka client 的交互关系二、eureka server 启动流程(eureka Netflix 原生源码)三、eureka server的三级缓存四、eureka server 与 eureka client 功能图五、小结eureka 在看完之后,其实会发现它有一些问题存在的。其中最大的问题就是信息延迟。如果使用tcp长链接来做的话,会有更好的效果。...

2021-06-08 11:16:26 95

solr-5.5.5 linux安装包

linux下solr-5.5.5安装包,支持jdk7,jetty部署,无需tomcat.

2018-07-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除