Explorar o código

增加了spring aop api设计与实现的笔记,增加了加密项目的有关笔记

seamew hai 1 ano
pai
achega
7245241dd1
Modificáronse 20 ficheiros con 560 adicións e 2 borrados
  1. 1 1
      前端/文档/jsdoc-vue.md
  2. 3 1
      后端/Spring/spring源码学习/spring aop编程思想/2、spring aop基础.md
  3. 452 0
      后端/Spring/spring源码学习/spring aop编程思想/3、Spring AOP API 设计与实现.md
  4. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/image-20221127151752087.png
  5. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210917031338Joinpoint.png
  6. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210917053407Pointcut.png
  7. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210917074048Advice.png
  8. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210917083751BeforeAdvice.png
  9. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918015501AfterAdvice.png
  10. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918031801Advisor.png
  11. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918032025Introduction.png
  12. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918032927AdvisorAdapter.png
  13. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918052609AopProxy.png
  14. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918053303AopProxy.png
  15. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918054107TargetSource.png
  16. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918055439ProxyCreatorSupport.png
  17. BIN=BIN
      后端/Spring/spring源码学习/spring aop编程思想/assets/o_210930065937ProxyConfig.png
  18. BIN=BIN
      后端/加密项目/classfinal-fatjar-1.2.1.jar
  19. 83 0
      后端/加密项目/hbase.md
  20. 21 0
      后端/加密项目/jar包加密.md

+ 1 - 1
前端/文档/jsdoc-vue.md

@@ -80,8 +80,8 @@ cnpm i
 # 4、执行脚本生成文档
 
 ````shell
+npm run docs:tui  或者使用命令
 jsdoc -c .jsdoc-tui.js -r
-npm run docs:tui
 ````
 
 # 5、注意事项路径不要重复,要不然会重复文档两次

+ 3 - 1
后端/Spring/spring源码学习/spring aop编程思想/2、spring aop基础.md

@@ -6,4 +6,6 @@
   - 注解激活 - `@EnableAspectJAutoProxy`
   - XML 配置 - `<aop:aspectj-autoproxy/>`
 - 声明 Aspect
-  - `@Aspect`
+  - `@Aspect`
+
+![image-20221127151752087](assets/image-20221127151752087.png)

+ 452 - 0
后端/Spring/spring源码学习/spring aop编程思想/3、Spring AOP API 设计与实现.md

@@ -0,0 +1,452 @@
+
+
+> [TOC]
+
+## Spring AOP API 设计与实现
+
+### Spring AOP API 整体设计
+
+- Join point - `Joinpoint`
+- Pointcut - `Pointcut`
+- Advice 执行动作 - `Advice`
+- Advice 容器 - `Advisor`
+- Introduction - `IntroductionInfo`
+- 代理对象创建基础类 - `ProxyCreatorSupport`
+- 代理工厂 - `ProxyFactory` 、`ProxyFactoryBean`
+- `AopProxyFactory` 配置管理器 - `AdvisedSupport`
+- IoC 容器自动代理抽象 - `AbstractAutoProxyCreator`
+
+### 接入点接口 - Joinpoint
+
+- Interceptor 执行上下文 - Invocation
+  - 方法拦截器执行上下文 - `MethodInvocation`
+  - 构造器拦截器执行上下文 - `ConstructorInvocation`
+- MethodInvocation 实现
+  - 基于反射 - `ReflectiveMethodInvocation`
+  - 基于 CGLIB - `CglibMethodInvocation`
+
+![img](assets/o_210917031338Joinpoint.png)
+
+### Joinpoint 条件接口 - Pointcut
+
+核心组件:
+
+- 类过滤器 - `ClassFilter`
+- 方法匹配器 - `MethodMatcher`
+
+![img](assets/o_210917053407Pointcut.png)
+
+#### Pointcut 操作
+
+- 组合实现 - `org.springframework.aop.support.ComposablePointcut`
+- 工具类
+  - `ClassFilter` 工具类 - `ClassFilters`
+  - `MethodMatcher` 工具类 - `MethodMatchers`
+  - `Pointcut` 工具类 - `Pointcuts`
+
+#### Pointcut 便利实现
+
+- 静态 `Pointcut` - `StaticMethodMatcherPointcut`
+- 正则表达式 `Pointcut` - `JdkRegexpMethodPointcut`
+- 控制流 `Pointcut` - `ControlFlowPointcut`
+
+#### Pointcut AspectJ 实现
+
+- 实现类 - `org.springframework.aop.aspectj.AspectJExpressionPointcut`
+- 指令支持 - `SUPPORTED_PRIMITIVES` 字段
+- 表达式 - `org.aspectj.weaver.tools.PointcutExpression`
+
+### Joinpoint 执行动作接口 - Advice
+
+![img](assets/o_210917074048Advice.png)
+
+- Around Advice - Interceptor
+  - 方法拦截器 - `MethodInterceptor`
+  - 构造器拦截器 - `ConstructorInterceptor`
+- 前置动作
+  - 标准接口 - `org.springframework.aop.BeforeAdvice`
+  - 方法级别 - `org.springframework.aop.MethodBeforeAdvice`
+- 后置动作
+  - `org.springframework.aop.AfterAdvice`
+  - `org.springframework.aop.AfterReturningAdvice`
+  - `org.springframework.aop.ThrowsAdvice`
+
+#### Joinpoint Before Advice 标准实现
+
+![img](assets/o_210917083751BeforeAdvice.png)
+
+接口:
+
+- 标准接口 - `org.springframework.aop.BeforeAdvice`
+- 方法级别 - `org.springframework.aop.MethodBeforeAdvice`
+
+实现:
+
+- `org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor`
+
+#### Joinpoint Before Advice AspectJ 实现
+
+- 实现类 - `org.springframework.aop.aspectj.AspectJMethodBeforeAdvice`
+
+#### Joinpoint After Advice 标准实现
+
+![img](assets/o_210918015501AfterAdvice.png)
+
+- 接口
+  - `org.springframework.aop.AfterAdvice`
+  - `org.springframework.aop.AfterReturningAdvice`
+  - `org.springframework.aop.ThrowsAdvice`
+- 实现
+  - `org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor`
+  - `org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor`
+
+#### Joinpoint After Advice AspectJ 实现
+
+- 接口
+  - `org.springframework.aop.AfterAdvice`
+  - `org.springframework.aop.AfterReturningAdvice`
+  - `org.springframework.aop.ThrowsAdvice`
+- 实现
+  - `org.springframework.aop.aspectj.AspectJAfterAdvice`
+  - `org.springframework.aop.aspectj.AspectJAfterReturningAdvice`
+  - `org.springframework.aop.aspectj.AspectJAfterThrowingAdvice`
+
+### Advice 容器接口 - Advisor
+
+![img](assets/o_210918031801Advisor.png)
+
+- 接口 - org.springframework.aop.Advisor
+  - PointcutAdvisor
+    - 通用实现 - `org.springframework.aop.support.DefaultPointcutAdvisor`
+  - `IntroductionAdvisor`
+
+#### Pointcut 与 Advice 连接器 - PointcutAdvisor
+
+- 接口 - org.springframework.aop.PointcutAdvisor
+  - 通用实现
+    - `org.springframework.aop.support.DefaultPointcutAdvisor`
+  - AspectJ 实现
+    - `org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor`
+    - `org.springframework.aop.aspectj.AspectJPointcutAdvisor`
+  - 静态方法实现
+    - `org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor`
+  - IoC 容器实现
+    - `org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor`
+
+### Introduction 与 Advice 连接器 - IntroductionAdvisor
+
+![img](assets/o_210918032025Introduction.png)
+
+- 接口 - org.springframework.aop.IntroductionAdvisor
+  - 元信息
+    - `org.springframework.aop.IntroductionInfo`
+  - 通用实现
+    - `org.springframework.aop.support.DefaultIntroductionAdvisor`
+  - AspectJ 实现
+    - `org.springframework.aop.aspectj.DeclareParentsAdvisor`
+
+### Advisor 的 Interceptor 适配器 - AdvisorAdapter
+
+![img](assets/o_210918032927AdvisorAdapter.png)
+
+- 接口 - org.springframework.aop.framework.adapter.AdvisorAdapter
+  - MethodBeforeAdvice实现
+    - `org.springframework.aop.framework.adapter.MethodBeforeAdviceAdapter`
+  - AfterReturningAdvice实现
+    - `org.springframework.aop.framework.adapter.AfterReturningAdviceAdapter`
+  - ThrowsAdvice 实现
+    - `org.springframework.aop.framework.adapter.ThrowsAdviceAdapter`
+
+### AOP 代理接口 - AopProxy
+
+![img](assets/o_210918052609AopProxy.png)
+
+- 接口 - `org.springframework.aop.framework.AopProxy`
+- 实现
+  - JDK 动态代理
+    - `org.springframework.aop.framework.JdkDynamicAopProxy`
+  - CGLIB 字节码提升
+    - `org.springframework.aop.framework.CglibAopProxy`
+    - `org.springframework.aop.framework.ObjenesisCglibAopProxy`
+
+#### AopProxy 工厂接口与实现
+
+![img](assets/o_210918053303AopProxy.png)
+
+- 接口 - `org.springframework.aop.framework.AopProxyFactory`
+- 默认实现:org.springframework.aop.framework.DefaultAopProxyFactory
+  - 返回类型
+    - `org.springframework.aop.framework.JdkDynamicAopProxy`
+    - `org.springframework.aop.framework.CglibAopProxy`
+    - `org.springframework.aop.framework.ObjenesisCglibAopProxy`
+
+#### JDK AopProxy 实现 - JdkDynamicAopProxy
+
+- 实现 - org.springframework.aop.framework.JdkDynamicAopProxy
+  - 配置 - `org.springframework.aop.framework.AdvisedSupport`
+  - 来源 - `org.springframework.aop.framework.DefaultAopProxyFactory`
+
+#### CGLIB AopProxy 实现 - CglibAopProxy
+
+- 实现 - org.springframework.aop.framework.CglibAopProxy
+  - 配置 - `org.springframework.aop.framework.AdvisedSupport`
+  - 来源 - `org.springframework.aop.framework.DefaultAopProxyFactory`
+
+#### AopProxyFactory 配置管理器 - AdvisedSupport
+
+- 核心 API - org.springframework.aop.framework.AdvisedSupport
+  - 语义 - 代理配置
+  - 基类 - `org.springframework.aop.framework.ProxyConfig`
+  - 实现接口 - `org.springframework.aop.framework.Advised`
+  - 使用场景 - `org.springframework.aop.framework.AopProxy` 实现
+
+### Advisor 链工厂接口与实现 - AdvisorChainFactory
+
+- 核心 API - org.springframework.aop.framework.AdvisorChainFactory
+  - 默认实现 - `org.springframework.aop.framework.DefaultAdvisorChainFactory`
+  - 返回类型
+    - `org.springframework.aop.framework.InterceptorAndDynamicMethodMatcher`
+    - `org.aopalliance.intercept.Interceptor`
+
+### 目标对象来源接口与实现 - TargetSource
+
+![img](assets/o_210918054107TargetSource.png)
+
+- 核心 API - org.springframework.aop.TargetSource
+  - 实现
+    - `org.springframework.aop.target.HotSwappableTargetSource`
+    - `org.springframework.aop.target.AbstractPoolingTargetSource`
+    - `org.springframework.aop.target.PrototypeTargetSource`
+    - `org.springframework.aop.target.ThreadLocalTargetSource`
+    - `org.springframework.aop.target.SingletonTargetSource`
+
+### 代理对象创建基础类 - ProxyCreatorSupport
+
+![img](assets/o_210918055439ProxyCreatorSupport.png)
+
+- 核心 API - org.springframework.aop.framework.ProxyCreatorSupport
+  - 语义 - 代理对象创建基类
+  - 基类 - `org.springframework.aop.framework.AdvisedSupport`
+
+#### ProxyCreatorSupport 标准实现 - ProxyFactory
+
+- 核心 API - org.springframework.aop.framework.ProxyFactory
+  - 基类 - `org.springframework.aop.framework.ProxyCreatorSupport`
+  - 特性增强
+    - 提供一些便利操作
+
+#### ProxyCreatorSupport IoC 容器实现 - ProxyFactoryBean
+
+- 核心 API - org.springframework.aop.framework.ProxyFactoryBean
+  - 基类 - `org.springframework.aop.framework.ProxyCreatorSupport`
+  - 特点
+    - Spring IoC 容器整合
+      - `org.springframework.beans.factory.BeanClassLoaderAware`
+      - `org.springframework.beans.factory.BeanFactoryAware`
+  - 特性增强
+    - 实现 `org.springframework.beans.factory.FactoryBean`
+
+#### ProxyCreatorSupport AspectJ 实现 - AspectJProxyFactory
+
+- 核心 API - org.springframework.aop.aspectj.annotation.AspectJProxyFactory
+  - 基类 - `org.springframework.aop.framework.ProxyCreatorSupport`
+  - 特点
+    - AspectJ 注解整合
+  - 相关 API
+    - AspectJ 元数据 - `org.springframework.aop.aspectj.annotation.AspectMetadata`
+    - AspectJ Advisor 工厂 - `org.springframework.aop.aspectj.annotation.AspectJAdvisorFactory`
+
+### AdvisedSupport 事件监听器 - AdvisedSupportListener
+
+- 核心 API - org.springframework.aop.framework.AdvisedSupportListener
+  - 事件对象 - `org.springframework.aop.framework.AdvisedSupport`
+  - 事件来源 - `org.springframework.aop.framework.ProxyCreatorSupport`
+  - 激活事件触发 - `ProxyCreatorSupport#createAopProxy`
+  - 变更事件触发 - 代理接口变化时、 Advisor 变化时、配置复制
+
+### IoC 容器自动代理抽象 - AbstractAutoProxyCreator
+
+![img](assets/o_210930065937ProxyConfig.png)
+
+- API - org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator
+  - 基类 - `org.springframework.aop.framework.ProxyProcessorSupport`
+  - 特点
+    - 与 Spring Bean 生命周期整合
+      - `org.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor`
+
+#### IoC 容器自动代理标准实现 - AbstractAutoProxyCreator
+
+- 基类 - org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator
+  - 默认实现 - `DefaultAdvisorAutoProxyCreator`
+  - Bean 名称匹配实现 - `BeanNameAutoProxyCreator`
+  - Infrastructure Bean 实现 - `InfrastructureAdvisorAutoProxyCreator`
+
+#### IoC 容器自动代理 AspectJ 实现 - AspectJAwareAdvisorAutoProxyCreator
+
+- org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator
+  - 基类 - `org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator`
+
+### AOP Infrastructure Bean 接口 - AopInfrastructureBean
+
+- 接口 - org.springframework.aop.framework.AopInfrastructureBean
+  - 语义 - Spring AOP 基础 Bean 标记接口
+  - 实现
+    - `org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator`
+    - `org.springframework.aop.scope.ScopedProxyFactoryBean`
+  - 判断逻辑
+    - `AbstractAutoProxyCreator#isInfrastructureClass`
+    - `ConfigurationClassUtils#checkConfigurationClassCandidate`
+
+### AOP 上下文辅助类 - AopContext
+
+- API - org.springframework.aop.framework.AopContext
+  - 语义 - `ThreadLocal` 的扩展,临时存储 AOP 对象
+
+### AOP 代理工具类 - AopProxyUtils
+
+- API - org.springframework.aop.framework.AopProxyUtils
+  - 代表方法
+    - `getSingletonTarget` - 从实例中获取单例对象
+    - `ultimateTargetClass` - 从实例中获取最终目标类
+    - `completeProxiedInterfaces` - 计算 `AdvisedSupport` 配置中所有被代理的接口
+    - `proxiedUserInterfaces` - 从代理对象中获取代理接口
+    - `isAopProxy` - 判断对象是否为代理对象
+    - `isJdkDynamicProxy` - 判断对象是否为 JDK 动态代理对象
+    - `isCglibProxy` - 判断对象是否为 CGLIB 代理对象
+    - `getTargetClass` - 从对象中获取目标类型
+    - `invokeJoinpointUsingReflection` - 使用 Java 反射调用 Joinpoint(目标方法)
+
+### AspectJ Enable 模块驱动实现 - EnableAspectJAutoProxy
+
+- 注解 - `org.springframework.context.annotation.EnableAspectJAutoProxy`
+- 属性方法
+  - `proxyTargetClass` - 是否已类型代理
+  - `exposeProxy` - 是否将代理对象暴露在 `AopContext` 中
+- 设计模式 - @Enable 模块驱动
+  - `ImportBeanDefinitionRegistrar` 实现 - `org.springframework.context.annotation.AspectJAutoProxyRegistrar`
+- 底层实现
+  - `org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator`
+
+### AspectJ XML 配置驱动实现 - `<aop:aspectj-autoproxy/>`
+
+- XML 元素 - <aop:aspectj-autoproxy/>
+  - 属性
+    - `proxy-target-class` - 是否已类型代理
+    - `expose-proxy` - 是否将代理对象暴露在 `AopContext` 中
+  - 设计模式 - Extensible XML Authoring
+  - 底层实现
+    - `org.springframework.aop.config.AspectJAutoProxyBeanDefinitionParser`
+
+#### AOP 配置 Schema-based 实现 - `<aop:config/>` 、`<aop:aspect/>`
+
+- XML 元素 - <aop:config/>
+  - 属性
+    - `proxy-target-class` - 是否已类型代理
+    - `expose-proxy` - 是否将代理对象暴露在 `AopContext` 中
+  - 嵌套元素
+    - `pointcut`
+    - `advisor`
+    - `aspect`
+  - 底层实现
+    - `org.springframework.aop.config.ConfigBeanDefinitionParser`
+- XML 元素 - <aop:aspect/>
+  - 父元素 - `<aop:config/>`
+  - 属性
+    - `ref` - Spring Bean 引用的名称
+    - `order` - Aspect 顺序数
+  - 嵌套元素
+    - `pointcut`
+    - `declare-parents`
+    - `before`
+    - `after`
+    - `after-returning`
+    - `after-throwing`
+    - `around`
+
+#### Pointcut Schema-based 实现 - `<aop:pointcut/>`
+
+- XML 元素 - <aop:pointcut/>
+  - 父元素 - `<aop:aspect/>` 或 `<aop:config/>`
+  - 属性
+    - `id` - Pointcut ID
+    - `expression` - (必须)AspectJ 表达式
+  - 底层实现
+    - `org.springframework.aop.Pointcut`
+
+#### Around Advice Schema-based 实现 - `<aop:around/>`
+
+- XML 元素 - <aop:around/>
+  - 父元素 - `<aop:aspect/>`
+  - 属性
+    - `pointcut` - AspectJ Pointcut 表达式
+    - `pointcut-ref` - 引用的 AspectJ Pointcut 名称
+    - `method` - 拦截目标方法
+    - `arg-names` - 目标方法参数名称
+
+#### Before Advice Schema-based 实现 - `<aop:before/>`
+
+- XML 元素 - <aop:before/>
+  - 父元素 - `<aop:aspect/>`
+  - 属性
+    - `pointcut` - AspectJ Pointcut 表达式
+    - `pointcut-ref` - 引用的 AspectJ Pointcut 名称
+    - `method` - 拦截目标方法
+    - `arg-names` - 目标方法参数名称
+
+#### After Advice Schema-based 实现 - `<aop:after/>`
+
+- XML 元素 - <aop:after/>
+  - 父元素 - `<aop:aspect/>`
+  - 属性
+    - `pointcut` - AspectJ Pointcut 表达式
+    - `pointcut-ref` - 引用的 AspectJ Pointcut 名称
+    - `method` - 拦截目标方法
+    - `arg-names` - 目标方法参数名称
+
+#### After Returning Advice Schema-based 实现 - `<aop:after-returning/>`
+
+- XML 元素 - <aop:after-returning/>
+  - 父元素 - `<aop:aspect/>`
+  - 属性
+    - `pointcut` - AspectJ Pointcut 表达式
+    - `pointcut-ref` - 引用的 AspectJ Pointcut 名称
+    - `method` - 拦截目标方法
+    - `arg-names` - 目标方法参数名称
+    - `returning` - 方法参数名称
+
+#### After Throwing Advice Schema-based 实现 - `<aop:after-throwing/>`
+
+- XML 元素 - <aop:after-throwing/>
+  - 父元素 - `<aop:aspect/>`
+  - 属性
+    - `pointcut` - AspectJ Pointcut 表达式
+    - `pointcut-ref` - 引用的 AspectJ Pointcut 名称
+    - `method` - 拦截目标方法
+    - `arg-names` - 目标方法参数名称
+    - `throwing` - 方法参数名称
+
+#### Adviser Schema-based 实现 - `<aop:advisor/>`
+
+- XML 元素 - <aop:advisor/>
+  - 父元素 - `<aop:config/>`
+  - 属性
+    - `advice-ref` - Advice Bean 引用
+    - `pointcut` - AspectJ Pointcut 表达式
+    - `pointcut-ref` - AspectJ Pointcut Bean 引用
+    - `order` - Advisor 顺序数
+
+#### Introduction Schema-based 实现 - `<aop:declare-parents/>`
+
+- XML 元素 - <aop:declare-parents/>
+  - 父元素 - `<aop:aspect/>`
+  - 属性
+    - `types-matching` - 是否已类型代理
+    - `implement-interface` - 实现接口全类名
+    - `default-impl` - 默认实现全类名
+    - `delegate-ref` - 委派实现 Bean 引用
+
+#### 作用域代理 Schema-based 实现 - `<aop:scoped-proxy/>`
+
+- XML 元素 - `<aop:scoped-proxy/>`
+- 属性
+  - `proxy-target-class` - 是否已类型代理

BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/image-20221127151752087.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210917031338Joinpoint.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210917053407Pointcut.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210917074048Advice.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210917083751BeforeAdvice.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918015501AfterAdvice.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918031801Advisor.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918032025Introduction.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918032927AdvisorAdapter.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918052609AopProxy.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918053303AopProxy.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918054107TargetSource.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210918055439ProxyCreatorSupport.png


BIN=BIN
后端/Spring/spring源码学习/spring aop编程思想/assets/o_210930065937ProxyConfig.png


BIN=BIN
后端/加密项目/classfinal-fatjar-1.2.1.jar


+ 83 - 0
后端/加密项目/hbase.md

@@ -0,0 +1,83 @@
+## 1、查看mac地址
+
+执行以下命令,查看云服务器的mac地址。
+
+```shell
+ifconfig
+```
+
+
+执行以下命令查看ens33的mac地址。
+```shell
+ifconfig ens33 |egrep "ether"
+```
+
+
+返回mac地址
+```shell
+ifconfig ens33 |egrep "ether" |awk '{print $2}' >> src.txt
+```
+
+
+
+## 2、生产密钥
+
+1. 创建私钥:
+
+```shell
+#RSA加密算法产生的2048位私钥,并使用F4作为公钥的E参数,将私钥保存在文件key.pri中
+openssl genrsa -out key.pri -f4 2048
+```
+
+2. 导出公钥
+
+```shell
+#用rsa的私钥文件key.pri导出PEM格式的公钥,保存在文件key.pub中
+openssl rsa -inform PEM -outform PEM -in key.pri -out key.pub -pubout
+```
+
+3. 私钥签名
+
+```shell
+#产生签名文件src.sig
+openssl dgst -sha256 -out src.sig -sign key.pri -keyform PEM src.txt
+```
+
+## 3、脚本
+
+```shell
+ifconfig ens33 |egrep "ether" |awk '{print $2}' >> /tmp/mac_address
+result=`openssl dgst -sha256 -keyform PEM -verify key.pub -signature src.sig /tmp/mac_address`
+rm /tmp/mac_address
+if [ "$result" = "Verification Failure" ];then
+        exit
+fi
+```
+
+## 4、混淆shell
+
+1. 下载Bashfuscator 
+
+```shell
+apt-get update && apt-get install python3 python3-pip python3-argcomplete xclip git
+git clone https://gitee.com/l0n9/Bashfuscator.git
+cd Bashfuscator
+python3 setup.py install --user
+cd bashfuscator/bin/
+cp bashfuscator /usr/local/bin
+```
+
+2. 混淆shell脚本
+
+**低混淆程度**
+
+```shell
+bashfuscator  -s 1 -t 1 --layers 1 --no-file-write -f test.sh -o output.sh
+```
+
+**正常混淆**
+
+```she
+bashfuscator -f test.sh -o output.sh
+```
+

+ 21 - 0
后端/加密项目/jar包加密.md

@@ -0,0 +1,21 @@
+# 基于**[ClassFinal](https://gitee.com/roseboy/classfinal)**加密JAR包
+
+```sh
+java -jar classfinal-fatjar-1.2.1.jar -file encryption-1.0.0.jar -packages com.seamew.utils -pwd 123456 -Y
+
+参数说明
+-file        加密的jar/war完整路径
+-packages    加密的包名(可为空,多个用","分割)
+-libjars     jar/war包lib下要加密jar文件名(可为空,多个用","分割)
+-cfgfiles    需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
+-exclude     排除的类名(可为空,多个用","分割)
+-classpath   外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
+-pwd         加密密码,如果是#号,则使用无密码模式加密
+-code        机器码,在绑定的机器生成,加密后只可在此机器上运行
+-Y           无需确认,不加此参数会提示确认以上信息
+```
+
+1. 替换加密算法
+2. 生产加密文件,验证是否有效
+3. 验证文件里面加入密钥
+