- 博客(108)
- 资源 (1)
- 收藏
- 关注
原创 java解析facebook的android app直投下的Referral URL
facebook的android直投的广告元数据解析,利用Google Play Install Referrer来进行facebook广告元数据透传,利用facebook的Referral URL解密进行广告元数据信息获取
2024-08-15 10:31:19
194
原创 不同WEB下的的ApplicationContext的选择
默认情况下,spring通过选择的web端的框架来选择使用哪个ApplicationContext子类,默认情况下我们一般使用spring mvc框架,这个时候AC的实现类为。如果不是这两种的话,将默认使用AnnotationConfigApplicationContext来作为AC的实现类。在使用springboot开发websocket或者netty项目时,可以通过设置。来关闭对web框架的装配,提升springboot的效率和节省内存。如果我们使用WebFlux作为web端框架的话,
2024-07-28 08:58:51
311
原创 SpringMvc之精细化拦截MappedInterceptor
是 Spring MVC 提供的一种机制,用于在请求处理流程中拦截特定路径的请求。与常规的不同,提供了更灵活的路径匹配功能,使得开发者可以更精细地控制拦截器的应用范围。当你添加了之后,在注册拦截器时,SpringMvc会将你写的拦截器包装成!拦截器链是定制化的,是根据每次请求去定制化的。全局拦截器与精细化拦截器的主要区别在于是否添加了路径匹配。
2024-07-27 07:18:07
296
原创 mysql的不等于和null值问题
为什么mysql不建议使用null值作为列的默认值?明明null值在存储的时候会占用更少的空间,为什么要使用空字符或者0等值来作为默认值呢?在 MySQL 中处理“不等于” (!或< >) 时不等于无法获取到null值的行记录信息。
2024-07-22 20:56:40
477
1
原创 DispatcherServlet懒加载带来的问题和思考
DispatcherServlet懒加载带来的问题和load-on-startup如何影响tomcat对servlet的初始化
2024-07-13 18:37:44
353
原创 【springboot笔记】程序可用性检测ApplicationAvailability
理解AvailabilityState的两个状态管理与运用
2023-11-18 17:28:55
555
原创 【nginx】(13: Permission denied) while connecting to upstream
nginx请求转发被selinux拦截问题处理
2023-09-18 17:33:52
822
原创 基于RouteDefinitionRepository实现基于mysql的路由声明加载
路由声明缓存器基于组合模式的管理其他的RouteDefinitionLocator实现类基于配置的路由声明加载器基于jvm内存的路由声明加载器,可以通过接口对缓存在内存中的路由声明进行新增和删除。基于redis的路由声明加载器,可以通过接口对缓存在redis中的路由声明进行增删。基于服务发现的路由声明加载器,默认是以作为Path断言的前缀来实现路由的。通过进行路由声明加载,然后缓存在自己的容器中。里面管理着通过实现接口,来实现基于mysql路由声明加载器。/**
2023-03-14 20:45:52
1050
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
676
原创 域名被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
1761
原创 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
459
原创 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
482
原创 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
329
原创 源码解析之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
420
原创 netty-server之NioEventLoopGroup初始化(一)
1.NioEventLoopGroup的继承体系图可以看到EventExecutorGroup是继承自ScheduleExecutorService 和 Iterable这就意味着存在线程池和迭代器,那么NioEventLoopGroup是对线程池做了什么,迭代器又在迭代什么?往下瞅瞅~2. EventExecutorGroup 核心接口功能描述EventExecutorGroup作为核心接口,定义了基本的核心功能。那么它是干啥的呢?官方解释:EventExecutorGroup负责通过自
2021-08-03 12:22:36
317
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
430
1
原创 Feign基于注解@EnableFeignClients的JDK动态代理对象创建流程(二)
1.说明这是对上一篇文章的绘图总结,大致内容为基于@EnableFeignClients如何推导到每个被@FeignClient注解的接口的JDK代理对象的创建过程。这里面涉及到两个Spring的组件:一个是ClassPathScanningCandidateComponentProvider,专门进行包扫描,然后根据注解类型进行过滤并生成对应的BeanDefinition的组件扫描器还有一个是FactoryBeanRegistrySupport,这个专门对FacotryBean的子类进行getOb
2021-07-21 11:22:21
291
原创 Feign之EnableFeignClients引发的初步探索(一)
背景(可以略过的废话)前段时间一个朋友在做spring security相关配置时遇到一些问题,请我帮忙解决一些问题,由于我自身并没有使用过security,所以花了一段时间去学习spring security的使用和解析了一下spring security源码。时至今日,终于可以再次重新开始学习spring cloud相关的内容了~1.@EnableFeignClients注解的默认配置1.1 basePackages扫描@FeignClient注解的包路径,扫描这些包下的所有类,获取被@F
2021-07-20 20:28:46
5515
3
原创 SpringSecurity过滤器链涉及组件绘图总结(十五)
1.请求到SpringSecurity过滤器流程汇总图1.请求发送到服务器端口,被tomcat监听到并转化为request,response2.请求在tomcat中进入过滤器链ApplicationFilterChain3.进入过滤器DelegatingFilterProxy(SpringSecurity创建并注入到过滤器链)4.通过DelegatingFilterProxy持有的bean名称,从Spring容器中获取FilterChainProxy5.FilterChainProxy 持有多条过
2021-07-16 14:34:00
677
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
894
1
原创 Spring Security默认拦截器链解析(十三)
1.SessionManagementFilter 会话管理器见名知意,会话管理器。主要是管理SecurityContext到会话中去。主要内容:1.防止重复执行2.sessionAuthenticationStrategy session认证处理策略sessionAuthenticationStrategy主要是用于在非匿名身份认证时,可以自定义策略去对HttpSession进行相关操作。典型用途是确保会话存在或更改会话 ID 以防止会话固定攻击ChangeSessionIdAuthent
2021-07-14 14:17:59
1533
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
729
2
原创 SpringSecurity默认过滤器链之UsernamePasswordAuthenticationFilter
1.作用这个Filter是通过用户名和密码进行认证(登录)的。系统默认有三种认证Filter。ClientCredentialsTokenEndpointFilter: 基于oauth2 token的认证入口Oauth2ClientAuthenticationProcessingFilter:oauth2 客户端用于从授权服务器获取accessToken进行认证2.认证统一流程AbstractAuthenticationProcessingFilterpublic void doFilte
2021-07-12 19:18:55
1693
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
854
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
575
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
1176
2
原创 Spring Security 之默认过滤器链的SecurityContextPersistenceFilter(七)
1.SecurityContextPersistenceFilter 是干啥的SecurityContextPersistenceFilter 是用来在认证之前从SecurityContextRepository获取SecurityContext,然后放入SecurityContextHolder中。在其他方法执行完毕之后,将SecurityContext 通过SecurityContextRepository存储到想要存储的地方,然后清理掉SecurityContextHolder中的Security
2021-07-08 14:20:19
424
2
原创 SpringSecurity之默认过滤器链的WebAsyncManagerIntegrationFilter(六)
1.背景在默认过滤器链中,总共有15个过滤器,它们每个都承载了不同的角色和功能。它的匹配也比较霸气是anyRequest。就是其他人都配不上的时候,我来接盘。2.WebAsyncManagerIntegrationFilter是干什么的?WebAsyncManager 是一个异步请求管理器,主要就是针对异步请求如何能和同步请求一样对一些数据进行处理。Spring Security在这里的WebAsyncManagerIntegrationFilter就是用来管理在异步请求中SecurityCon
2021-07-07 14:33:44
489
2
原创 Spring Security之SecurityFilterChain的选择与执行流程(五)
1.FilterChainProxy去找过滤器链去了~FilterChain 是过滤器链,我好像之前一直说的拦截器链(尴尬)在上一篇中,我们知道FilterChainProxy 拿到了三条过滤器链,那FilterChainProxy如何根据请求去选择呢?每个SecurityFilterChain都有一个RequestMatcher 匹配器,这个匹配器中可以放置多个url或者通配符表达式进行匹配,匹配成功就直接返回这个过滤器链的过滤器集合。所以SecurityFilterChain其实也不是过滤器
2021-07-07 11:08:49
2091
2
原创 Spring Security 之 DelegatingFilterProxy 到 FilterChainProxy完成 security 的安全接入(四)
1.重聊DelegatingFilterProxyRegistrationBean在前几篇中一直聊的一个东西就是将springSecurityFilterChain注入到servletContext容器中完成请求拦截。而注入的方式是通过DelegatingFilterProxyRegistrationBean来完成,这个类的主要目的是为了包装DelegatingFilterProxy 类,并且实现自动注入到servletContext的流程所以DelegatingFilterProxyRegistr
2021-07-06 14:25:17
976
4
原创 Spring security 之 tomcat到springSecurityFilterChain拦截器过程分析(三)
1.前景提要springSecurityFilterChain是一个DelegatingFilterProxyRegistrationBean的对象。在第二篇中,我们分析得知,spring security通过注入DelegatingFilterProxyRegistrationBean对象到spring 容器中来使 servlet 容器在初始化的过程中能够获取并初始化到自己的过滤器链中去。2.加入servlet 容器拦截器链中的springSecurityFilterChain如何运作这里
2021-07-05 14:54:21
1068
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
840
1
原创 SpringSecurity源码解析之如何注入springSecurityFilterChain到servlet容器完成请求拦截(一)
1.官方文档解读在官方文档中告诉我们,当开启spring security 的默认配置时,spring security 会创建一个名为springSecurityFilterChain的bean来完成所有安全方面的功能。比如:应用程序url保护用户密码认证重定向登录界面登出接口上面都是些基本功能。那么springSecurityFilterChain 是在哪创建的呢?2. springSecurityFilterChain 的创建可以看到 springSecurityFil
2021-07-02 19:18:02
1086
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
1889
原创 Ribbon之ZoneAwareLoadBalancer及其父类做了些什么?
1.看看ZoneAwareLoadBalancer都做了些什么?这个类主要是跟Zone有关的,提供了跟zone有关的方法。但是在国内基本上用不上。eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS:region:可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再或者北京等等,没有具体大小的限制。根据项目具体的情况,可以自行合理划分region。zone:可以简单理解为region内的具体机房,比如说region划分为北京,然后北京有两个机房,就可以
2021-06-15 15:28:02
1030
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人