自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 SkyWalking--trace-ignore插件不生效问题

我使用的skywalking版本为8.5.0, agent如何忽略告警url,请参考文档,这里只是实践中的问题记录:/**不生效问题在agent向上报SkyWalking链路数据时,一些心跳检查并不希望被上报,太占用资源,但是配置了/v1/kv/config/**后,确没有像期望的那样,忽略这类请求,后来经过试验发现,apm-trace-ignore-plugin.config文件的配置也是有规则的:如果是一个确定的或后缀确定的url, /actuator/health,/**/actuator/he

2022-05-17 21:24:14 2578 9

原创 SpringSecurity采坑记录——404导致有效token被认为无效

问题昨天遇到了一个大坑,接手一个现有的项目使用的SpringSecurity的,本地跑起来之后postman调接口 token一直认证不了,但是用相同的token在dev服务器端访问确可以通过(本地和dev环境连的同一个redis)。原因先直接说原因:我postman调用的url不对,这个项目包含十几个微服务,都有context-path的配置,唯独这个服务没有,我postman调用时想当然的给加了context-path,实际上是404。或许你会问,怎么连404都看不出来,然而是实际上我拿到的响

2022-03-23 12:21:09 3067 5

原创 SpringSecurity中文文档—Authentication—Remember Me

Remember-me或persistent-login authentication 指的是网站能够在会话之间记住主体的身份。这通常是通过向浏览器发送cookie来实现的,在未来的会话中会检测到cookie,并导致自动登录。Spring Security为这些操作提供了必要的hooks ,并有两个具体的Memory me实现。一种使用哈希来保护基于cookie的令牌的安全性,另一种使用数据库或其他持久存储机制来存储生成的令牌。请注意,这两种实现都需要UserDetailsService。如果您使用的身份

2022-03-16 10:32:37 1524

原创 SpringSecurity中文文档—Authentication—Session Management

文章目录Detecting TimeoutsConcurrent Session ControlSession Fixation Attack ProtectionDetecting Timeouts您可以将Spring Security配置为检测无效会话ID的提交,并将用户重定向到适当的URL。这是通过会话管理元素实现的:@Overrideprotected void configure(HttpSecurity http) throws Exception{ http .

2022-03-06 23:09:46 725

原创 SpringSecurity中文文档—Authentication— Reading Username/Password

验证用户身份最常见的方法之一是验证用户名和密码。因此,Spring Security为使用用户名和密码进行身份验证提供了全面的支持。Spring Security为从HttpServletRequest读取用户名和密码提供了三种内置机制:Form、Basic、Digest。Form LoginSpring Security支持通过html表单提供用户名和密码。本节详细介绍了基于表单的身份验证如何在Spring Security中工作。让我们看看Spring Security中基于表单的登录是如何工作的

2022-03-06 00:23:04 1393

原创 SpringSecurity中文文档—Authentication— Authentication Architecture

SecurityContextHolderSecurityContextHolder是Spring Security存储身份验证人员详细信息的地方。Spring Security认证模型的核心是SecurityContextHolder。它包含SecurityContext。Spring Security不关心SecurityContextHolder的填充方式。如果它包含一个值,则将其用作当前经过身份验证的用户。指示用户已通过身份验证的最简单方法是直接设置SecurityContextHolder

2022-03-03 11:12:55 4002

原创 SpringSecurity中文文档——Architecture

Spring Security 的 Serlvet支持是基于Servelt的过滤器实现的,下图展示了一个HTTP请求典型的分层处理过程。当客户端发送一个请求到应用时,容器会创建一个过滤器链FilterChain,包含Filter和基于请求URI处理HttpServletRequest 的Servlet。在SpringMVC应用中,Servlet是DispatcherServlet的一个实例。一个Servlet最多只能处理一个HttpServletRequest和HttpServletResponse。

2022-03-01 20:21:11 2262 2

原创 Shiro权限管理

文章目录核心概念SubjectSecurityManagerRealmShiro组件架构AuthenticatorAuthenticationStrategy核心概念Shiro 的体系结构有三个主要概念—— Subject、 SecurityManager 和 Realms。Subject在保护应用程序安全时,最需要问自己的问题可能是: “谁是当前用户?”或“当前用户是否允许做 x”?在编写代码或设计用户界面时,我们经常会问自己这些问题: 应用程序通常是基于用户故事构建的,而您希望基于每个用户的基

2021-03-31 11:15:16 121

原创 springboot项目集成Consul配置中心的多环境方案

多环境部署profile方案:整体思路是配置maven多环境的profile,打包时使用mvn -P={active-profile}指定想要激活的版本第一步:配置项目中maven的profiles标签 <profiles> <profile> <!-- 本地开发 --> <id>local</id> <activation>

2021-01-09 10:57:52 910

原创 SpringCloud Zuul执行流程与源码分析

文章目录请求在网关内的执行流程过滤器的具体调用逻辑请求在网关内的执行流程用户请求大致上是按这个顺序来进行的,我们再看具体内部这四种Filter的执行顺序,搬一段ZuulServlet.service()源码:public void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws ServletException, IOException

2020-12-27 23:55:17 304

原创 HotSpot垃圾回收算法实现细节和经典收集器

文章目录HotSpot的垃圾回收算法实现细节根节点枚举HotSpot的垃圾回收算法实现细节根节点枚举我们前面介绍了固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,尽管目标明确,但查找过程要做到高效并非一件容易的事情,现在Java应用越做越大,光是方法区的大小就常有数百上千兆。里面的类、常量恒河如沙,若要逐个检查以这里为起源的引用肯定得消耗不少时间。迄今为止所有收集器在根节点枚举这一步骤时都是必须暂停用户线程的,因此也会面临和整理内存

2020-12-19 23:34:55 136 4

原创 JVM对象回收依据和垃圾回收算法

文章目录对象回收依据引用计数法可达性分析算法Java中的GC Roots对象对象回收依据前面介绍的Java内存运行时区域的各个部分中,程序计数器、虚拟机栈、本地方法栈会随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出执行着出栈和入栈的操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由即时编译器进行一些优化,但在基于概念模型的讨论里,答题上可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,当方法结束或线程结

2020-12-10 22:27:53 127

原创 详解JVM中的Java对象

文章目录对象的创建第一步:对象内存的分配指针碰撞(Bump the Pointer)空闲列表(Free List)内存分配的线程安全问题第二步:对象属性的初始化第三步:对象构造函数的执行对象的内存布局对象的创建虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符号引用,并检查符号引用代表的类是否被加载、解析、初始化,若没有则先进行类加载。如果没有加载,需要先进行类加载。第一步:对象内存的分配类加载检查通过后,虚拟机为新生对象分配内存,对象所需内存大小在类加载完成后便可完全确定。分配内存的任

2020-11-23 17:50:39 250

原创 JVM运行时数据区域以及javap的使用

文章目录JVM内存结构图程序计数器Java虚拟机栈局部变量表操作数栈动态连接方法的返回地址本地方法栈方法区运行时常量池Java堆JDK7和JDK8常量池的对比直接内存JVM内存结构图程序计数器程序计数器(Program counter Register,也叫PC寄存器)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过该改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、

2020-11-16 20:40:51 229

原创 Spring的BeanDefinition

文章目录

2020-11-13 11:03:22 376

原创 记一次线上服务假死问题(MongoDB超时和OOM两个坑)

事件的背景是:一个老系统,功能模块很多,包含两个团队的职责(最开始只有一个团队),所以要将这个系统拆分成两个服务,各自团队负责自己的服务,由于业务影响,这次上线只能在23点后通宵进行。问题一:ECS自建Mongo数据表数据量大,没有建索引,导致查询巨慢,CPU打满。问题发生在第二天下午,提供给APP的接口响应变慢,后来应用假死(CPU、内存、带宽都检查过没有异常)。因为接口逻辑并不复杂,推断主要耗时就在从Mongo获取上,看Mongo的那台服务器,发现CPU已经打满了,然后就分析Mongo正在执行什么任

2020-08-08 17:35:35 1191

原创 Annotations——@Import注解

文章目录@Import注解的作用声明Bean和导入@Configuration导入ImportSelector的实现类@Import注解的作用Spring 3.0之前,我们的Bean可以通过xml配置文件与扫描特定包下面的类来将类注入到Spring IOC容器内。Spring 3.0之后提供了JavaConfig的方式,也就是将IOC容器里Bean的元信息以java代码的方式进行描述。我们可以...

2020-02-13 19:59:02 321

原创 SpringCloud之Eureka(一)

Eureka是什么Spring Cloud Eureka是Spring Cloud Netflix微服务套件的一部分,它是基于Netflix Eureka的二次封装,主要负责完成微服务中各个的服务注册与发现。假设我们有两个服务A和B,其中A服务需要调用到B服务来完成某个业务操作,如果没有注册中心,我们可能会将B服务的地址和接口API以配置文件的形式注入到应用中,但随着业务的增长,单个的服务B可能...

2020-02-03 11:42:34 260

原创 通过Java反射来实现接口字段的可配置化

项目中与外部系统的数据交互肯定少不了,大部分项目的对外接口其实可以固定,基本是万年不变。但是现在在做的百度CMS系统由于对接了太多的业务线,各个业务线推送合同的字段不一样,并且由于安全的考虑,并不会放开所有字段推送给外部系统。这就造成一个问题,随着各业务线的业务需要,可能会时不时的改动数据传输的接口,这就增加了开发的工作量,由于基本都是后台定时任务,QA测试也并不是很方便,因此就想搞一个前台可配置...

2020-01-30 23:30:18 2610

原创 文件编码识别工具icu4j

需求背景PM接了个邮件预览的需求,其他项目组买了Aspose.Email for Java的服务,包装一下做了个邮件转换服务,将eml、msg格式转换为html文本,将html以流的形式返回。基于这个邮件转换服务,我们开发出邮件预览功能。思路就是文件传到他们那边,拿到返回的流,之后有两种方式:1.流写入文件,让用户下载。2.将返回的流转为字符串,让前端开一个tab进行渲染。其实在我们接入之前,...

2020-01-16 22:02:05 1265

原创 Java后端XSS攻击防护和防止SQL注入

最近在重构老项目的部分功能,发现项目中没有对XSS攻击防护的过滤,做了XSS过滤器,顺带整理一下内容。SQL注入一个SQL注入例子我们举一个简单的sql注入例子,来解释其是如何进行注入的。假设现有一个登录功能,提交时需要验证用户名和密码,后台的验证是通过查库中的USER表完成的:String sql = "select * from USER where username= ' "+use...

2020-01-07 17:05:06 2709 2

原创 Java日志——日志框架与SLF4J的整合

之前已经介绍过了常用的JUL、Log4j、Logback等常用的日志框架,现将它们与SLF4J作一个整合。先放一张SLF4J官网的图片,后面我们一点一点的来看。Logback+SLF4J对于Logback+SLF4J的使用,我们只需要引入logback-classic这个pom就行了,因为这个pom会自动帮我们引入logback-core、slf4j-api等pom。这种方式配置还是很简单...

2019-12-10 15:28:01 245

原创 Annotations——@AliasFor注解和@Inherite注解

文章目录@AliasFor的作用几种@AliasFor的使用场景在同一个注解内显示使用@AliasFor的作用@AliasFor是一个Spring提供的注解,顾名思义,alias单词是别名的意思,可以看出这个注解是起别名用的。具体的例子,我们在其使用方式中一一列举。几种@AliasFor的使用场景在同一个注解内显示使用我们摘一段RequestMapping注解中的代码来举例此种情况的使用...

2019-11-29 16:48:15 1558

转载 Java中的锁

文章目录锁的分类乐观锁与悲观锁CASCAS的三大问题自旋锁和适应性自旋锁自旋锁的缺点无锁、偏向锁、轻量级锁、重量级锁无锁锁的分类Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录:乐观锁与悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中...

2019-11-17 23:29:57 146

原创 Java日志——Logback的使用及原理

文章目录LogbackLogback的Maven引入Logback与日志门面slf4jLogbackLogback与Log4j的作者是同一个人,从官网介绍中也说明了,Logback的目的是作为流行的log4j项目的接替者。Logback分为三个模块:logback-core:核心代码模块,为其他两个模块奠定基础。logback-classic:对Log4j的一个改良版本,同时实现了sl...

2019-11-15 15:37:39 4113

原创 Java日志——Log4j的使用及原理

文章目录什么是Log4jLog4j的日志级别(Level)org.apache.log4j.Priorityorg.apache.log4j.Levelcom.log4j.Logger类org.apache.log4j.spi.AppenderAttachable接口org.apache.log4j.Category类com.log4j.Logger类什么是Log4jLog4J 是 Apach...

2019-11-11 21:43:05 1061

原创 设计模式——适配器模式

文章目录适配器模式定义适配器模式中的三种角色Target(目标角色)Adaptee(源角色)Adapter(适配器类)适配器模式优点适配器模式缺点适配器模式定义将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类都能够在一起工作。适配器模式中的三种角色Target(目标角色)该角色定义把其他类转换为何种接口,也就是我们期望的接口。通常情况下目标角...

2019-11-07 18:19:18 195

原创 设计模式——门面模式(外观模式)

门面模式定义要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。Subsystem Classes是子系统所有类的简称,它可能代表一个类,也可能代表几十个对象的集合。门面模式中的角色Facade门面角色客户端可以调用这个角色的方法。此角色知晓子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系...

2019-11-04 00:00:56 314

原创 设计模式——命令模式

命令模式定义将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。...

2019-11-03 10:09:39 174

原创 Java日志——JUL(java.util.logging)的使用及原理

文章目录日志原理简述JULJUL定义的日志级别关于构造函数中defaultBundle的解释Level中的静态内部类KnownLevel的功能LogManager类的用法LogManager对象的初始化LogManager对象配置的装载日志原理简述日志功能的实现基本靠一下几个组件来完成:Loggers:Logger负责捕捉事件并将其发送给合适的AppenderAppenders:也称为H...

2019-10-24 14:55:16 2499

空空如也

空空如也

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

TA关注的人

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