自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

思维码途

打造一个懂技术+懂业务+懂管理+略懂英语的社区 → 能够独立负责项目0~1展开到落地 归纳为一句话 目标就是 技术 + 业务 + 管理 + 英语 -> 实现自我价值 -> 带领团队能够开展0~1项目到落地

  • 博客(381)
  • 问答 (3)
  • 收藏
  • 关注

原创 11OAuth2

OAuth 是一个开放的非常重要的认证标准/协议,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等),并且在这个过程中无须将用户名和密码提供给第三方应用。通过令牌(token)可以实现这一功能,每一个令牌授权一个特定的网站在特定的时段内允许可特定的资源。OAuth 让用户可以授权第三方网站灵活访问它们存储在另外一些资源服务器上的特定信息,而非所有内容。对于用户而言,我们在互联网应用中最常见的 OAuth 应用就是各种第三方登录,例如QQ授权登录、

2025-07-01 23:04:22 935

原创 10授权

在前面的案例中,我们配置的 URL 拦截规则和请求 URL 所需要的权限都是通过代码来配置的,这样就比较死板,如果想要调整访问某一个 URL 所需要的权限,就需要修改代码。动态管理权限规则就是我们将 URL 拦截规则和访问 URI 所需要的权限都保存在数据库中,这样,在不修改源代码的情况下,只需要修改数据库中的数据,就可以对权限进行调整。用户<--中间表--> 角色 <--中间表--> 菜单。

2025-07-01 23:03:49 929

原创 09异常处理

Override//......and().exceptionHandling()//异常处理response.getWriter().write("尚未认证,请进行认证操作!");})response.getWriter().write("无权访问!");});

2025-07-01 23:03:00 213

原创 08跨域

跨域问题是实际应用开发中一个非常常见的需求,在 Spring 框架中对于跨域问题的处理方案有好几种,引 了 Spring Security 之后,跨域问题的处理方案又增加了。CORS (Cross-Origin Resource Sharing )是由 W3C制定的一种跨域资源共享技术标准,其目的就是为了解决前端的跨域请求。在JavaEE 开发中,最常见的前端跨域请求解决方案是早期的JSONP,但是 JSONP 只支持 GET 请求,这是。

2025-07-01 23:02:23 778

原创 07CSRF 漏洞保护

CSRF (Cross-Site Request Forgery 跨站请求伪造),也可称为一键式攻击 (one-click-attack),通常缩写为 CSRF 或者 XSRF。CSRF 攻击是一种挟持用户在当前已登录的浏览器上发送恶意请求的攻击方法。相对于XSS利用用户对指定网站的信任,CSRF则是利用网站对用户网页浏览器的信任。简单来说,CSRF是致击者通过一些技术手段欺骗用户的浏览器,去访问一个用户曾经认证过的网站并执行恶意请求,例如发送邮件、发消息、甚至财产操作 (如转账和购买商品)。

2025-07-01 23:01:30 868

原创 06会话管理

当浏览器调用登录接口登录成功后,服务端会和浏览器之间建立一个会话 (Session) 浏览器在每次发送请求时都会携带一个 Sessionld,服务端则根据这个 Sessionld 来判断用户身份。当浏览器关闭后,服务端的 Session 并不会自动销毁,需要开发者手动在服务端调用Session销毁方法,或者等Session 过期时间到了自动销毁。在Spring Security 中,与HttpSession相关的功能由SessionManagementFiter 和。

2025-07-01 23:00:55 975

原创 05RememberMe

RememberMe 这个功能非常常见,下图就是QQ 邮箱登录时的“记住我” 选项。提到 RememberMe,一些初学者往往会有一些误解,认为 RememberMe 功能就是把用户名/密码用 Cookie 保存在浏览器中,下次登录时不用再次输入用户名/密码。这个理解显然是不对的。我们这里所说的 RememberMe 是一种服务器端的行为。传统的登录方式基于 Session会话,一旦用户的会话超时过期,就要再次登录,这样太过于烦琐。如果能有一种机制,让用户会话过期之后,还能继续保。

2025-06-30 23:46:38 1065

原创 04密码加密

2011 年12月21 日,有人在网络上公开了一个包含600万个 CSDN 用户资料的数据库,数据全部为明文储存,包含用户名、密码以及注册邮箱。事件发生后 CSDN 在微博、官方网站等渠道发出了声明,解释说此数据库系2009 年备份所用,因不明原因泄漏,已经向警方报案,后又在官网发出了公开道歉信。在接下来的十多天里,金山、网易、京东、当当、新浪等多家公司被卷入到这次事件中。整个事件中最触目惊心的莫过于 CSDN 把用户。

2025-06-30 23:45:10 1314

原创 03认证原理&自定义认证&添加认证验证码

index 公共资源/hello .... 受保护资源 权限管理@Override# 说明- permitAll() 代表放行该资源,该资源为公共资源 无需认证和授权可以直接访问- anyRequest().authenticated() 代表所有请求,必须认证之后才能访问- formLogin() 代表开启表单认证## 注意: 放行资源必须放在所有认证请求之前!引入模板依赖定义登录页面 controller在 templates 中定义登录界面<head>

2025-06-30 23:44:20 1222

原创 02环境搭建

AuthenticationManager、ProviderManger、以及 AuthenticationProvider 关系WebSecurityConfigurerAdapter 扩展 Spring Security 所有默认配置UserDetailService 用来修改默认认证的数据源信息。

2025-06-30 13:13:35 873

原创 01权限管理

SpringSecurity

2025-06-30 13:13:01 1100

原创 02C#基本结构篇(D3_内部类-代码块-数据类型-变量-常量-字面量-运算符-流程控制语句)

/ 可以访问外部类的私有成员// 方法体,包含多条语句的代码块方法调用时,虽然不直接涉及代码块,但方法的执行实际上是在其内部定义的代码块中进行的。MyMethod();// 调用方法,执行其内部代码块中的代码。在C#中,变量的作用域由其声明的地方决定。{ // 开始一个新的作用域或代码块int x = 10;// x在这个代码块内可见和可用。// 输出 x 的值。} // x 在这个作用域外不再可见。尝试访问 x 会导致编译错误。

2025-03-11 08:17:23 1111 7

原创 02C#基本结构篇(D4_注释-访问修饰符-标识符-关键字-运算符-流程控制语句)

访问修饰符] [返回类型] 方法名([参数列表])// 方法体访问修饰符:如publicprivateprotectedinternal等,控制方法的访问权限。返回类型:方法返回的数据类型,如果是void则表示不返回任何值。方法名:标识符,遵循C#的命名规则。参数列表:括号内包含一个或多个参数,每个参数由类型和名称组成,参数间用逗号分隔。方法体:包含执行任务的代码块。从C# 6.0开始,可以使用表达式体来定义简单的只返回一个表达式结果的方法。// 相当于 { return a * b;

2025-03-10 01:31:54 930

原创 02C#基本结构篇(D2_命名空间 - 类 - 抽象类 - 接口 - 继承 - 多态性)

命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与其他名称进行分隔,确保在不同命名空间里即便声明了相同名称的类,也不会引发冲突,恰似计算机系统里的文件夹架构,同一文件夹中严禁同名文件存在,可不同文件夹下的文件即便重名也相安无事。命名空间的定义是以关键字namespace// 代码声明fc.func();sc.func();在C#中,你同样需要首先定义一个命名空间,并在其中声明你的类。// 类的成员函数实现通过合理使用using。

2025-03-09 00:59:14 1229 1

原创 02C#基本结构篇(D1_基本语法)

C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。例如,以 Rectangle(矩形)对象为例。它具有 length 和 width 属性。根据设计,它可能需要接受这些属性值、计算面积和显示细节。实例// 成员变量Width: 3.5。

2025-03-09 00:56:59 981

原创 05类加载机制篇(D7_类加载及执行子系统的案例与实战)

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一 大步。

2025-03-04 23:47:55 1136 3

原创 05类加载机制篇(D6_方法调用和方法执行)

1、Class文件的编译过程中不包含传统编译中的连接步骤,所有方法调用中的目标方法在Class文件里 面都是一个常量池中的符号引用,而不是方法在实际运行时内存布局中的入口地址。2、在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用,这类方法(编译期可知,运行 期不可变)的调用称为解析(Resolution)。主要包括静态方法和私有方法两大类,前者与类型直接关联,后者在外部不可被访问,这两种方法各自 的。

2025-03-04 23:36:55 987

原创 05类加载机制篇(D5_虚拟机字节码执行引擎)

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一 大步。执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机 器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层 面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执 行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。

2025-03-04 00:59:30 1032

原创 05类加载机制篇(D4_虚拟机类加载机制)

什么时候开始加载,虚拟机规范并没有强制性的约束,对于其它大部分阶段究竟何时开始虚拟机规范也都没有进行规范,这些都是交由虚拟机的具体实现来把握。所以不同的虚拟机它们开始的时机可能是不 同的。但是对于初始化却严格的规定了有且只有四种情况必须先对类进行“初始化”(加载,验证,准 备自然遇到 new 、 getstatic 、 putstatic 和 invokestatic 这四条指令时,如果对应的类没有初始 化,则要对对应的类先进行初始化。

2025-03-04 00:46:47 1199

原创 05类加载机制篇(D3_深入理解Class)

JVM会将某个Java 类中所有使用到了的类的完全限定名 以二进制形式的完全限定名 封装成CONSTANT_Class_info结构体中,然后将其放置到常量池里。CONSTANT_Class_info 的 tag 值为 7。其结构如下Tips:类的完全限定名和二进制形式的完全限定名在某个Java源码中,我们会使用很多个类,比如我们定义了一个 ClassTest的类,并把它放到。

2025-03-02 00:21:30 891

原创 05类加载机制篇(D2_字节码指令(二))

类型转换:i2l,i2f,i2d,l2f,l2d,f2d(放宽数值转换) i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(缩窄数值转换)有条件转移:ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,if_icmpeq,if_icmpene,操作数栈管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap。astore_1 将引用类型或returnAddress类型值存入局部变量1。

2025-03-02 00:20:41 1064

原创 05类加载机制篇(D2_字节码指令(一))

Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands) 而构成。由于Java 虚拟机采用面向操作数栈而不是寄存器的结构,所以大多数的指令都不包含操作数,只有一个操作码。由于限制了 Java虚拟机操作码的长度为一个字节(即0~255),这意味着指令集的操作码总数不可能超过256条。

2025-03-01 00:59:44 876

原创 05类加载机制篇(D1_类文件结构)

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。我们知道:“计算机只认识0和1,所以我们写的程序需要被编译器翻译成由0和1构成的二进制格式才能被计算机执行。”由于最近十年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展, 把我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语 言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。

2025-03-01 00:58:01 1170

原创 06排序 + 查找(D1_排序(D1_基础学习))

所谓排序,就是整理表中的数据元素,使之按元素的关键字递增/递减的顺序排列。排序(Bubble Sort)是一种简单的排序算法,它的基本思想是通过不断交换相邻两个元素的位置,使得较大的元素逐渐往后移动,直到最后一个元素为止。冒泡排序的时间复杂度为 O(n^2),空间复杂度为 O(1),是一种稳定的排序算法。从序列的第一个元素开始,对相邻的两个元素进行比较,如果它们的顺序错误就交换它们的位置,即将较大的元素往后移动,直到遍历到序列的最后一个元素。对剩下的元素重复上述步骤,直到整个序列都已经有序。

2025-02-23 12:51:56 1539 2

原创 04性能监控与调优篇(D6_调优案例分析与实战)

XX:MetaspaceSize: 指定元空间触发Fullgc的初始阈值(元空间无固定初始大小), 以字节为单位,默认是21M,达到该值就会触发。2.5)Survivor 0/Survivor 1(S0和S1区):括号内的3.938M表示最大容量,1.188M表示 当前容量,之后的值是当。它包括老年代(图中Old区域)和新生代(图中Eden/S0/S1 三个统称新生代,2.7)Perm Gen(永久代):括号内的256.000M表示最大容量,105.250M表示当前容 量,之后的105.032M表示。

2025-02-23 12:10:44 1067

原创 04性能监控与调优篇(D2_JVM调优⼯具)

通过上⼀章讲解我们对JVM调优有了整体的认知,接下来我们对在调优过程中所使⽤的⼯具逐⼀介绍。MAT是⼀个强⼤的内存分析⼯具,可以快捷、有效地帮助我们找到内存泄露,减少内存消耗分析⼯ 具。MAT是Memory Analyzer tool的缩写,是⼀种快速,功能丰富的Java堆分析⼯具,能帮助你查找内存泄漏和减少内存消耗。很多情况下,我们需要处理测试提供的hprof⽂件,分析内存相关问题,那么MAT也绝对是不⼆之选。找到最⼤的对象,因为MAT提供显示合理的累积⼤⼩(retained size)

2025-02-23 10:31:25 1023

原创 04性能监控与调优篇(D8_让Java性能提升的JIT深度剖析)

在服务端模式下是 10000 次(我们用的都是服务端,java –version查询),可通过 -XX: CompileThreshold 来设定。Ø 第 2 层:也称为 C1 编译,开启Profiling,仅执行带方法调用次数和循环回边执行次数 profiling 的 C1 编译;在 HotSpot 虚拟机中的热点探测是 JIT 优化的条件,热点探测是基于计数器的热点探测,采用这种方法的虚拟机。Ø 第 1 层:可称为 C1 编译,将字节码编译为本地代码,进行简单、可靠的优化,不开启 Profiling;

2025-02-19 00:46:33 971 1

原创 04性能监控与调优篇(D7_JVM调优实战及常量池详解)

/字符串常量池:"计算机"和"技术" 堆内存:str1引用的对象"计算机技术"//堆内存中还有个StringBuilder的对象,但是会被gc回收,StringBuilder的toString方法会new String(),这个String才是真正返回的对象引用String str2 = new StringBuilder("计算机").append("技术").toString();//没有出现"计算机技术"字面量,所以不会在常量池里生成"计算机技术"对象//true。

2025-02-19 00:45:50 1263

原创 04运维实用篇(D6_热部署)

简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。使用开发者工具可以为当前项目开启热部署功能使用构建项目操作对工程进行热部署自动热部署要开启自动构建项目自动热部署要开启在程序运行时自动构建项目通过修改项目中的文件,你可以发现其实并不是所有的文件修改都会激活热部署的,原因在于在开发者工具中有一组配置,当满足了配置中的条件后,才会启动热部署,配置中默认不参与热部署的目录信息如下/resources/static。

2025-02-17 00:14:06 1172

原创 04运维实用篇(D5_监控)

在说监控之前,需要回顾一下软件业的发展史。最早的软件完成一些非常简单的功能,代码不多,错误也少。随着软件功能的逐步完善,软件的功能变得越来越复杂,功能不能得到有效的保障,这个阶段出现了针对软件功能的检测,也就是软件测试。伴随着计算机操作系统的逐步升级,软件的运行状态也变得开始让人捉摸不透,出现了不稳定的状况。伴随着计算机网络的发展,程序也从单机状态切换成基于计算机网络的程序,应用于网络的程序开始出现,由于网络的不稳定性,程序的运行状态让使用者更加堪忧。

2025-02-17 00:12:26 1100

原创 04运维实用篇(D4_日志)

编程期调试代码运营期记录信息记录日常运营重要信息(峰值流量、平均响应时长……)记录应用报错信息(错误堆栈)记录运维过程数据(扩容、宕机、报警……)基于lombok提供的@Slf4j注解为类快速添加日志对象日志输出格式设置规则日志信息显示,记录已经控制住了,下面就要说一下日志的转存了。日志不能仅显示在控制台上,要把日志记录到文件中,方便后期维护查阅。对于日志文件的使用存在各种各样的策略,例如每日记录,分类记录,报警后记录等。这里主要研究日志文件如何记录。

2025-02-17 00:09:35 1043

原创 04运维实用篇(D3_多环境开发)

多环境开发需要设置若干种常用环境,例如开发、生产、测试环境yaml格式中设置多环境使用---区分环境设置边界每种环境的区别在于加载的配置属性不同启用某种环境时需要指定启动时使用该环境可以使用独立配置文件定义环境属性独立配置文件便于线上系统维护更新并保障系统安全性properties文件多环境配置仅支持多文件格式作为程序员在搞配置的时候往往处于一种分久必合合久必分的局面。开始先写一起,后来为了方便维护就拆分。

2025-02-17 00:08:26 1083

原创 04性能监控与调优篇(D4_JVM优化)

jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help 检索出所 有的标准参数。用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...](执行 jar 文件)其中选项包括:-d32 使用 32 位数据模型 (如果可用)-d64 使用 64 位数据模型 (如果可用)

2025-02-16 20:50:15 1002

原创 04性能监控与调优篇(D3_JVM参数)

在JVM调整过程中,主要是对JVM参数做的调整,以下我们介绍主要参数。JVM参数有很多,其实我 们直接使⽤默认的JVM参数,不去修改都可以满⾜⼤多数情况。但是如果你想在有限的硬件资源下,部 署的系统达到最⼤的运⾏效率,那么进⾏相关的JVM参数设置是必不可少的。下⾯我们就来对这些JVM参数进⾏详细的介绍。JVM参数主要分为以下三种:标准参数、⾮标准参数、不稳定参数。

2025-02-16 20:49:35 684

原创 04性能监控与调优篇(D1_学习前言)

本章主要通过JVM基础、调优层次、调优指标、何时JVM调优、JVM调优⽬标、JVM调优原则以及JVM调优步骤介绍,以达到对JVM调优有个整体上的认识,后续通过具体的案例结合理论来看下如何进行调优。

2025-02-15 22:42:37 1063

原创 09综合算法练习题

然后执行下面的语句,当c被赋值为chars里面所有字符各一次后,就会退出这个循环.

2025-02-15 22:35:24 962

原创 08模拟法 + 技巧 + 数学 + 缓存(D4_缓存)

缓存算法是编程中的基本算法,用于解决缓存的更新和替换问题,通过合理地选择缓存中数据的存储位置,可以提高系统的访问速度和性能。本文介绍几个通用的缓存算法,这些算法适用于多种应用场景的缓存策略,其目标是在限定的缓存空间内,最大化缓存命中率,同时最小化缓存淘汰率。随机替换 (Random Replacement,RR):随机选择一个数据项淘汰。先进先出(First In First Out, FIFO):根据数据项进入缓存的时间先后,淘汰最早进入缓存的数据项。

2025-02-14 01:10:01 1634 2

原创 08模拟法 + 技巧 + 数学 + 缓存(D3_数学)

【代码】08模拟法 + 技巧 + 数学 + 缓存(D3_数学)

2025-02-14 01:06:30 914

原创 08模拟法 + 技巧 + 数学 + 缓存(D2_技巧)

【代码】08模拟法 + 技巧 + 数学 + 缓存(D2_技巧)

2025-02-14 01:05:54 670

原创 08模拟法 + 技巧 + 数学 + 缓存(D1_模拟法)

【代码】08模拟法 + 技巧 + 数学 + 缓存(D1_模拟法)

2025-02-14 01:04:43 934

空空如也

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

TA关注的人

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