head-first-SpringSecurity

一、权限认证 SpringSecurity

1.引入安全框架SpringSecurity

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion
of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

2.Maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

mybatis-cache

mybatis-缓存

什么是缓存?

缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其他存储设备中获取,缓存最重要的一点就是从其内部获取数据的速度是非常快的,通过缓存可以加快数据的访问速度。比如我们从db中获取数据,中间需要经过网络传输耗时,db server从磁盘读取数据耗时等,如果这些数据直接放在jvm对应的内存中,访问是不是会快很多。

mybatis中的缓存

mybatis中分为一级缓存和二级缓存。

Head First Netty

思维导图

image.png
image.png

前言

本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。

一、Netty概述

Spring and Jwt

使用JWT

1.引入依赖

<dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.4.0</version>
        </dependency>

2.生成token

public class createToken {
    public static void main(String[] args) {
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.SECOND, 90);
        //生成令牌
        String token = JWT.create()
                .withClaim("username", "张三")//设置自定义用户名
                .withExpiresAt(instance.getTime())//设置过期时间
                .sign(Algorithm.HMAC256("token!Q2W#E$RW"));//设置签名保密复杂
        //输出令牌
        System.out.println("--------token:" + token);
    }
}
-----
- 生成结果
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOlsicGhvbmUiLCIxNDMyMzIzNDEzNCJdLCJleHAiOjE1OTU3Mzk0NDIsInVzZXJuYW1lIjoi5byg5LiJIn0.aHmE3RNqvAjFr_dvyn_sD2VJ46P7EGiS5OBMO_TI5jg

Spring Cyclic Ependencies

Spring是怎么解决循环依赖的?

首先站在Spring整个Framework体系而言的话,Spring的Bean是由一个BeanDefinition来的,就是在Spring当中,有一个叫建模的类BeanDefinition,Spring的Bean有一系列比较复杂的生命周期:

  • 首先,Spring容器启动。

  • spring进行扫描

  • 反射后封装成beanDefinition对象,放入beanDefinitionMap
  • 遍历map
  • 验证(是否单例、是否延迟加载、是否抽象)
  • 推断构造方法( 把当前这个Spring Bean所代表的类当中的构造方法得到一个最佳的一个构造方法 )
  • 准备开始进行实例
  • 去单例池中查,没有——》去二级缓存中找,没有提前暴露——》生成一个objectFactory对象暴露到二级缓存中——》属性注入,发现依赖Y——》此时Y开始它的生命周期直到属性注入,发现依赖X->X又走一遍生命周期,当走到去二级缓存中找的时候找到了->往Y中注入X的objectFactory对象->完成循环依赖。

1、为什么要使用X的objectFacory对象而不是直接使用X对象?

利于拓展,程序员可以通过beanPostProcess接口操作objectFactory对象生成自己想要的对象

SpringBoot startup process

SpringBoot应用启动流程

图片

我们将各步骤总结精炼如下:

  1. 通过 SpringFactoriesLoader 加载 META-INF/spring.factories 文件,获取并创建 SpringApplicationRunListener 对象
  2. 然后由 SpringApplicationRunListener 来发出 starting 消息
  3. 创建参数,并配置当前 SpringBoot 应用将要使用的 Environment
  4. 完成之后,依然由 SpringApplicationRunListener 来发出 environmentPrepared 消息
  5. 创建 ApplicationContext
  6. 初始化 ApplicationContext,并设置 Environment,加载相关配置等
  7. SpringApplicationRunListener 来发出 contextPrepared 消息,告知SpringBoot 应用使用的 ApplicationContext 已准备OK
  8. 将各种 beans 装载入 ApplicationContext,继续由 SpringApplicationRunListener 来发出 contextLoaded 消息,告知 SpringBoot 应用使用的 ApplicationContext 已装填OK
  9. refresh ApplicationContext,完成IoC容器可用的最后一步
  10. SpringApplicationRunListener 来发出 started 消息
  11. 完成最终的程序的启动
  12. SpringApplicationRunListener 来发出 running 消息,告知程序已运行起来了

至此,全流程结束!

SpringMVC work stream

SpringMVC工作流程springmvc工作流程 处理模型数据方式一:将方法的返回值设置为ModelAndView 处理模型数据方式二:方法的返回值仍是String类型,在方法的入参中传入Map,Model或者ModelMap, 不管将处理器方法的返回值设置为ModelAndView还是在方法的入参传入Map,Model或者ModelMap,SpringMVC都会转换为一个Model...

Spring Related

Spring相关

什么是IOC

IOC: Inversion of control 反转控制。 比如以前创建一个对象,需要自己主动new 一个对象,通过IOC,对象的创建交由Spring框架 创建,开发人员直接使用已经创建好的对象。

什么是DI

DI: Dependency Injection 依赖注入。 通过IOC创建对象的时候,可以注入字符串甚至其他对象。 比如DAO就会注入session factory.

Inversion of Control控制反转

控制反转的定义

Spring、SpringMVC、Mybatis整合

SSM整合