Java—并发编程(二)synchronized关键字
1. synchronized原理 在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,s…
Java—并发编程(一)线程基础
多线程是Java中不可避免的一个重要主体。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), notify()等接口;Thre…
Java—Cglib基本使用
Cglib是什么 Cglib是一个强大的、高性能的代码生成包,它广泛被许多AOP框架使用,为他们提供方法的拦截。 对此图总结一下: 最底层的是字节码Bytecode,字节码是Java为了保证“一次编译…
Java—Cglib的invoke和invokeSuper区别
简而言之,invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 MyMethodInterceptor的 interceptor方法,如果是个拦截器…
Java—Javassist(动态代理)(动态字节)
概述 Javassist是一个开源的分析、编辑和创建Java字节码的类库,可以直接编辑和生成Java生成的字节码。相对于bcel, asm等这些工具,开发者不需要了解虚拟机指令,就能动态改变类的结构,…
Kotlin—日志的使用方法
都知道java中的@Slf4j使用得多么的舒服: @Slf4j public class TestController{ @GetMapping("/test") public String test…
SpringSecurity—权限管理的投票器与表决机制
当用户想访问 Spring Security 中一个受保护的资源时,用户具备一些角色,该资源的访问也需要一些角色,在比对用户具备的角色和资源需要的角色时,就会用到投票器和表决机制。 当用户想要访问某一…
SpringSecurity—从子线程获取用户登录信息
Spring Security 中想要获取登录用户信息,不能在子线程中获取,只能在当前线程中获取,其中一个重要的原因就是 SecurityContextHolder 默认将用户信息保存在 Thread…
SpringSecurity—new 出来的对象一样也可以被 Spring 容器管理
按理说自己 new 出来的对象和容器是没有关系的,但是在 Spring Security 框架中也 new 了很多对象出来,一样也可以被容器管理,那么它是怎么做到的? 有些项目,就会发现里边的动态权限…
SpringSecurity—多种加密方案共存
1.PasswordEncoder 在 Spring Security 中,跟密码加密/校验相关的事情,都是由 PasswordEncoder 来主导的,PasswordEncoder 拥有众多的实现…
SpringBoot—三种跨域场景总结
我把 Spring Boot 中的跨域问题分为了三个场景: 普通跨域Spring Security 跨域OAuth2 跨域 分为三种并非多此一举,主要是因为这三种场景的配置都不太一样,而这三种场景又都…
SpringSecurity—用 Swagger 测试接口,在请求头中携带 Token
1.项目规划 搭建一个 OAuth2+JWT 的环境来做演示。一共搭建两个服务: 我稍微解释一下: auth-server 就是我的资源服务器,用来颁发 JWT 令牌。user-server 则是资源…
SpringSecurity—两种资源放行策略
Spring Security 中,到底该怎么样给资源额外放行? 1.两种思路 在 Spring Security 中,有一个资源,如果你希望用户不用登录就能访问,那么一般来说,你有两种配置策略: 第…
SpringSecurity—CSRF 防御源码解析
主要从两个方面来和大家讲解: 返回给前端的 _csrf 参数是如何生成的。前端传来的 _csrf 参数是如何校验的。 1.随机字符串生成 我们先来看一下 Spr…
SpringSecurity—防御 CSRF 攻击
CSRF 就是跨域请求伪造,英文全称是 Cross Site Request Forgery。 这是一种非常常见的 Web 攻击方式,其实是很好防御的,但是由于经常被很多开发者忽略,进而导致很多网站实…
SpringSecurity—防御会话固定攻击
之前聊了 Spring Security 中的 session 并发问题,如何像 QQ 一样,用户在一台设备上登录成功之后,就会自动踢掉另一台设备上的登录。 当然,Spring Security 中,…
SpringSecurity—自带防火墙
Spring Security 这么麻烦,不如自己写一个 Filter 拦截请求,简单实用。 自己写当然也可以实现,但是大部分情况下,大家都不是专业的 Web 安全工程师,所以考虑问题也不过就是认证和…
SpringSecurity—自动踢掉前一个登录用户
1.需求分析 在同一个系统中,我们可能只允许一个用户在一个终端上登录,一般来说这可能是出于安全方面的考虑,但是也有一些情况是出于业务上的考虑,松哥之前遇到的需求就是业务原因要求一个用户只能在一个设备上…
SpringSecurity—中如何快速查看登录用户 IP 地址等信息
1.Authentication Authentication 这个接口聊过多次,今天还要再来聊一聊。 Authentication 接口用来保存我们的登录用户信息,实际上,它是对主体(java.se…
SpringSecurity—自定义认证逻辑(高级)
之前我们自定义的一个核心思路就是自定义过滤器,在过滤器中做各种各样我们想做的事: 无论是添加登录验证码还是修改登录数据库格式,都需要对认证逻辑作出调整。 http://www.enmalvi.com/…
SpringSecurity—权限管理模型(RBAC)
1.RBAC 简介 RBAC(Role-based access control)是一种以角色为基础的访问控制(Role-based access control,RBAC),它是一种较新且广为使用的…
Java—加密扩展(JCE)框架 之 Cipher-加密与解密
javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适。Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种加解密…
Java—CAS机制
CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。 CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。 更新一个变量的时候,只有当变量的预期值…
Kotlin-1.5—内联值类
早在 kotlin 1.3 就已经有了 inline class 的alpha版本。到 1.4.30 进入 beta,如今在 1.5.0 中 终于迎来了 Stable 版本。早期的实验版本的 inli…
Java— I/O流框架
1、流的概念 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象 流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 IO流总览 2、IO流分类 按照…
Java—网络编程(Socket)
1、概述 计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统。网络编程就是编写程序使互联网的两个(或多个)设备(如计算机)之间进行数…
Kotlin—String的常用方法
Kotlin的String类中有非常多的方法,下面列举一些经常用到的方法,首先定义一个字符串变量,后面都以这个变量来验证String相关的方法。 //定义字符串 val str = "12345678…
Kotlin-协程<专>—协程原理
前言 协程(Coroutines),是 Kotlin 「最神奇」的特性,没有之一。 1. 线程 & 协程 很多主流编程语言都支持协程,比如:C#,Python,Lua,就连C++20…
Kotlin-协程(专)—Flow 篇(四十一)
Flow 就是 Kotlin 协程与响应式编程模型结合的产物,你会发现它与 RxJava 非常像,二者之间也有相互转换的 API,使用起来非常方便。 随着 RxJava 的流行,响应式编程模…
Kotlin-协程(专)—Select 篇(四十)
Select 并不是什么新鲜概念,我们在 IO 多路复用的时候就见过它,在 Java NIO 里面也见过它。接下来给各位介绍的是 Kotlin 协程的 Select。 复用多个 await 我们前面已…