diff --git a/README.md b/README.md
index 7e40342..5cc91d5 100644
--- a/README.md
+++ b/README.md
@@ -114,7 +114,8 @@
### SpringSecurity
- [SpringSecurity请求全过程解析](/docs/SpringSecurity/SpringSecurity请求全过程解析.md)
-
+- [SpringSecurity自定义用户认证](/docs/SpringSecurity/SpringSecurity自定义用户认证.md)
+-
## MyBatis
### 基础支持层
diff --git a/docs/SpringSecurity/SpringSecurity自定义用户认证.md b/docs/SpringSecurity/SpringSecurity自定义用户认证.md
new file mode 100644
index 0000000..9e9e758
--- /dev/null
+++ b/docs/SpringSecurity/SpringSecurity自定义用户认证.md
@@ -0,0 +1,232 @@
+# Spring Security自定义用户认证
+
+在**Spring Boot中开启Spring Security**一节中我们简单地搭建了一个Spring Boot + Spring Security的项目,其中登录页、用户名和密码都是由Spring Security自动生成的。Spring Security支持我们自定义认证的过程,如使用自定义的登录页替换默认的登录页,用户信息的获取逻辑、登录成功或失败后的处理逻辑等。这里将在上一节的源码基础上进行改造。
+
+## 配置自定义登录页
+
+为了方便起见,我们直接在src/main/resources/resources目录下创建一个login.html(不需要Controller跳转):
+
+```
+
+
+
+
+ 登录
+
+
+
+
+
+
+```
+
+要怎么做才能让Spring Security跳转到我们自己定义的登录页面呢?很简单,只需要在BrowserSecurityConfig的configure中添加一些配置:
+
+```
+@Configuration
+public class BrowserConfig extends WebSecurityConfigurerAdapter {
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http.formLogin() // 表单登录
+ .loginPage("/login.html") // 自定义登录页
+ .loginProcessingUrl("/login") // 登录认证路径
+ .and()
+ .authorizeRequests() // 授权配置
+ .antMatchers("/login.html", "/css/", "/error").permitAll() // 无需认证
+ .anyRequest().authenticated() // 除antMatchers中配置路径外其他所有请求都需要认证
+ .and().csrf().disable();
+ }
+}
+```
+
+上面代码中.loginPage("/login.html")指定了跳转到登录页面的请求URL,.loginProcessingUrl("/login")对应登录页面form表单的action="/login",.antMatchers("/login.html", "/css/", "/error").permitAll()表示跳转到登录页面的请求不被拦截。
+
+这时候启动系统,访问http://localhost:8080/hello,会看到页面已经被重定向到了http://localhost:8080/login.html:
+
+
+
+## 源码解析
+
+### BrowserConfig配置解析
+
+我们首先来梳理下BrowserConfig中的配置是如何被Spring Security所加载的。
+
+首先找到调用BrowserConfig的configure()的地方,在其父类WebSecurityConfigurerAdapter的getHttp()中:
+
+
+
+往上一步找到调用getHttp()的地方,在同个类的init()中:
+
+
+
+往上一步找到调用init()的地方,在AbstractConfiguredSecurityBuilder的init()中:
+
+
+
+在init()被调用时,它首先会遍历getConfigurers()返回的集合中的元素,调用其init(),点击getConfigurers()查看,发现其读取的是configurers属性的值,那么configurers是什么时候被赋值的呢?我们在同个类的add()中找到configurers被赋值的代码:
+
+
+
+往上一步找到调用add()的地方,在同个类的apply()中:
+
+
+
+往上一步找到调用apply()的地方,在WebSecurityConfiguration的setFilterChainProxySecurityConfigurer()中:
+
+
+
+我们可以看到,在setFilterChainProxySecurityConfigurer()中,首先会实例化一个WebSecurity(AbstractConfiguredSecurityBuilder的实现类)的实例,遍历参数webSecurityConfigurers,将存储在其中的元素作为参数传递给WebSecurity的apply(),那么webSecurityConfigurers是什么时候被赋值的呢?我们根据@Value中的信息找到webSecurityConfigurers被赋值的地方,在AutowiredWebSecurityConfigurersIgnoreParents的getWebSecurityConfigurers()中:
+
+
+
+我们重点看第二句代码,可以看到这里会提取存储在bean工厂中类型为WebSecurityConfigurer.class的bean,而BrowserConfig正是WebSecurityConfigurerAdapter的实现类。
+
+解决完configurers的赋值问题,我们回到AbstractConfiguredSecurityBuilder的init()处,找到调用该方法的地方,在同个类的doBuild()中:
+
+
+
+往上一步找到调用doBuild()的地方,在AbstractSecurityBuilder的build()中:
+
+
+
+往上一步找到调用doBuild()的地方,在WebSecurityConfiguration的springSecurityFilterChain()中:
+
+
+
+至此,我们分析完了BrowserConfig被Spring Security加载的过程。现在我们再来看看当我们自定义的配置被加载完后,http各属性的变化,在BrowserConfig的configure()末尾打上断点,当程序走到断点处时,查看http属性:
+
+
+
+我们配置的.loginPage("/login.html")和.loginProcessingUrl("/login")在FormLoginConfigurer中:
+
+
+
+配置的.antMatchers("/login.html", "/css/", "/error").permitAll()在ExpressionUrlAuthorizationConfigurer中:
+
+
+
+这样,当我们访问除"/login.html", "/css/", "/error"以外的路径时,在AbstractSecurityInterceptor(FilterSecurityInterceptor的父类)的attemptAuthorization()中会抛出AccessDeniedException异常(最终由AuthenticationTrustResolverImpl的isAnonymous()进行判断)
+
+
+
+当我们访问"/login.html", "/css/", "/error"这几个路径时,在AbstractSecurityInterceptor(FilterSecurityInterceptor的父类)的attemptAuthorization()中正常执行(最终由SecurityExpressionRoot的permitAll()进行判断)
+
+
+
+### login.html路径解析
+
+当我们请求的资源需要经过认证时,Spring Security会将请求重定向到我们自定义的登录页,那么Spring又是如何找到我们自定义的登录页的呢?下面就让我们来解析一下:
+
+我们首先来到DispatcherServlet中,DispatcherServlet是Spring Web处理请求的入口。当Spring Web项目启动后,第一次接收到请求时,会调用其initStrategies()进行初始化:
+
+
+
+我们重点关注initHandlerMappings(context);这句,initHandlerMappings()用于初始化处理器映射器(处理器映射器可以根据请求找到对应的资源),我们来到initHandlerMappings()中:
+
+
+
+可以看到,当程序走到initHandlerMappings()中时,会从bean工厂中找出HandlerMapping.class类型的bean,将其存储到handlerMappings属性中。这里看到一共找到5个,分别是:requestMappingHandlerMapping(将请求与标注了@RequestMapping的方法进行关联)、weclomePageHandlerMapping(将请求与主页进行关联)、beanNameHandlerMapping(将请求与同名的bean进行关联)、routerFunctionMapping(将请求与RouterFunction进行关联)、resourceHandlerMapping(将请求与静态资源进行关联),这5个bean是在WebMvcAutoConfiguration$EnableWebMvcConfiguration中配置的:
+
+requestMappingHandlerMapping:
+
+
+
+resourceHandlerMapping:
+
+
+
+beanNameHandlerMapping、routerFunctionMapping、resourceHandlerMapping在EnableWebMvcConfiguration的父类(WebMvcConfigurationSupport)中配置:
+
+beanNameHandlerMapping:
+
+
+
+routerFunctionMapping:
+
+
+
+resourceHandlerMapping:
+
+
+
+我们将目光锁定在resourceHandlerMapping上,当resourceHandlerMapping被初始化时,会调用addResourceHandlers()为registry添加资源处理器,我们找到实际被调用的addResourceHandlers(),在DelegatingWebMvcConfiguration中:
+
+
+
+可以看到这里实际调用的是configurers属性的addResourceHandlers(),而configurers是一个final类型的成员变量,其值是WebMvcConfigurerComposite的实例,我们来到WebMvcConfigurerComposite中:
+
+
+
+可以看到这里实际调用的是delegates属性的addResourceHandlers(),delegates是一个final类型的集合,集合的元素由addWebMvcConfigurers()负责添加:
+
+
+
+我们找到调用addWebMvcConfigurers()的地方,在DelegatingWebMvcConfiguration的setConfigurers()中:
+
+
+
+可以看到当setConfigurers()被初始化时,Spring会往参数configurers中传入两个值,我们关注第一个值,是一个WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter的实例,注意它的属性resourceProperties,是一个WebProperties$Resources的实例,默认情况下,在实例化WebMvcAutoConfigurationAdapter时,由传入参数webProperties进行赋值:webProperties.getResources():
+
+
+
+我们进入参数webProperties的类中,可以看到getResources()是直接实例化了一个Resources,其属性staticLocations是一个含有4个值的final类型的字符串数组,这4个值正是Spring寻找静态文件的地方:
+
+
+
+
+
+我们回到WebMvcAutoConfiguration的addResourceHandlers()中:
+
+
+
+在addResourceHandlers()中,会为registry添加两个资源处理器,当请求路径是“/webjars/”时,会在”classpath:/META-INF/resources/webjars/“路径下寻找对应的资源,当请求路径是“/**”时,会在”classpath:/META-INF/resources/“、”classpath:/resources/“、”classpath:/static/“、”classpath:/public/“路径下寻找对应的资源。
+
+现在我们通过访问http://localhost:8080/login.html来验证这个过程。
+
+请求首先来到DispatcherServlet的doDispatch()中,由于是对静态资源的请求,当程序走到mappedHandler = getHandler(processedRequest);时,通过getHandler()返回SimpleUrlHandlerMapping(即resourceHandlerMapping的类型)的HandlerExecutionChain:
+
+
+
+然后由实际的处理器进行处理:
+
+
+
+程序一路调试,来到ResourceHttpRequestHandler的handleRequest()中,通过调用Resource resource = getResource(request);找到请求对应的资源:
+
+
+
+而在getResource()中,实际是将请求路径(即login.html)与前面配置的路径进行拼接(组合成/resources/login.html这样的路径),再通过类加载器来寻找资源。
+
+后面源码深入过深,就不一一展开了,只截取其中比较重要的几段代码:
+
+PathResourceResolver中:
+
+
+
+
+
+ClassPathResource中:
+
+
+
+ClassLoader中:
+
+
+
+URLClassLoader中:
+
+
+
+最终,类加载器会在如上两个路径下找到登录页并返回。
+
+## 参考
+
+1. [Spring Security自定义用户认证](https://mrbird.cc/Spring-Security-Authentication.html)
+
diff --git a/images/SpringSecurity/003ff2fa-022e-47cb-8aa9-343ed7c40c4a.png b/images/SpringSecurity/003ff2fa-022e-47cb-8aa9-343ed7c40c4a.png
new file mode 100644
index 0000000..d9f05ff
Binary files /dev/null and b/images/SpringSecurity/003ff2fa-022e-47cb-8aa9-343ed7c40c4a.png differ
diff --git a/images/SpringSecurity/0879e131-da5f-491e-a153-42770ce8b975.png b/images/SpringSecurity/0879e131-da5f-491e-a153-42770ce8b975.png
new file mode 100644
index 0000000..b289e9c
Binary files /dev/null and b/images/SpringSecurity/0879e131-da5f-491e-a153-42770ce8b975.png differ
diff --git a/images/SpringSecurity/0a97b011-34ed-4d57-945e-95c8e6bafc8e.png b/images/SpringSecurity/0a97b011-34ed-4d57-945e-95c8e6bafc8e.png
new file mode 100644
index 0000000..7fe5470
Binary files /dev/null and b/images/SpringSecurity/0a97b011-34ed-4d57-945e-95c8e6bafc8e.png differ
diff --git a/images/SpringSecurity/12629a18-56ef-4286-9ab9-c124dc3d6791.png b/images/SpringSecurity/12629a18-56ef-4286-9ab9-c124dc3d6791.png
new file mode 100644
index 0000000..f484780
Binary files /dev/null and b/images/SpringSecurity/12629a18-56ef-4286-9ab9-c124dc3d6791.png differ
diff --git a/images/SpringSecurity/1590bae4-2e3a-4f97-b02d-d918c49cac22.png b/images/SpringSecurity/1590bae4-2e3a-4f97-b02d-d918c49cac22.png
new file mode 100644
index 0000000..0be3c53
Binary files /dev/null and b/images/SpringSecurity/1590bae4-2e3a-4f97-b02d-d918c49cac22.png differ
diff --git a/images/SpringSecurity/1840f96a-6a31-4fce-8a98-02fa7fc60fbf.png b/images/SpringSecurity/1840f96a-6a31-4fce-8a98-02fa7fc60fbf.png
new file mode 100644
index 0000000..0aabd77
Binary files /dev/null and b/images/SpringSecurity/1840f96a-6a31-4fce-8a98-02fa7fc60fbf.png differ
diff --git a/images/SpringSecurity/1b03bdd4-6773-4b39-a664-fdf65d104403.png b/images/SpringSecurity/1b03bdd4-6773-4b39-a664-fdf65d104403.png
index eda0774..781c22a 100644
Binary files a/images/SpringSecurity/1b03bdd4-6773-4b39-a664-fdf65d104403.png and b/images/SpringSecurity/1b03bdd4-6773-4b39-a664-fdf65d104403.png differ
diff --git a/images/SpringSecurity/1e929fec-d1ab-44b5-89bc-6e5ebcda1daf.png b/images/SpringSecurity/1e929fec-d1ab-44b5-89bc-6e5ebcda1daf.png
new file mode 100644
index 0000000..1749b17
Binary files /dev/null and b/images/SpringSecurity/1e929fec-d1ab-44b5-89bc-6e5ebcda1daf.png differ
diff --git a/images/SpringSecurity/25899949-dac3-4873-a2af-7abfe0e97615.png b/images/SpringSecurity/25899949-dac3-4873-a2af-7abfe0e97615.png
new file mode 100644
index 0000000..b643b4d
Binary files /dev/null and b/images/SpringSecurity/25899949-dac3-4873-a2af-7abfe0e97615.png differ
diff --git a/images/SpringSecurity/2b54af34-7d68-4f40-8726-d02d18e03dea.png b/images/SpringSecurity/2b54af34-7d68-4f40-8726-d02d18e03dea.png
new file mode 100644
index 0000000..ef9bd55
Binary files /dev/null and b/images/SpringSecurity/2b54af34-7d68-4f40-8726-d02d18e03dea.png differ
diff --git a/images/SpringSecurity/2e5440bc-9488-4213-a030-0d25153bb2ea.png b/images/SpringSecurity/2e5440bc-9488-4213-a030-0d25153bb2ea.png
index a67ccc0..10aae2c 100644
Binary files a/images/SpringSecurity/2e5440bc-9488-4213-a030-0d25153bb2ea.png and b/images/SpringSecurity/2e5440bc-9488-4213-a030-0d25153bb2ea.png differ
diff --git a/images/SpringSecurity/42c5125e-0dc2-4c0c-9434-af4a9efd2d5d.png b/images/SpringSecurity/42c5125e-0dc2-4c0c-9434-af4a9efd2d5d.png
new file mode 100644
index 0000000..8bc23f9
Binary files /dev/null and b/images/SpringSecurity/42c5125e-0dc2-4c0c-9434-af4a9efd2d5d.png differ
diff --git a/images/SpringSecurity/4612c27e-dd9f-4e60-92dc-fc9858496ec5.png b/images/SpringSecurity/4612c27e-dd9f-4e60-92dc-fc9858496ec5.png
new file mode 100644
index 0000000..542b7a5
Binary files /dev/null and b/images/SpringSecurity/4612c27e-dd9f-4e60-92dc-fc9858496ec5.png differ
diff --git a/images/SpringSecurity/47a7bca4-d858-4cb1-b126-347805b74053.png b/images/SpringSecurity/47a7bca4-d858-4cb1-b126-347805b74053.png
index c987730..27451b7 100644
Binary files a/images/SpringSecurity/47a7bca4-d858-4cb1-b126-347805b74053.png and b/images/SpringSecurity/47a7bca4-d858-4cb1-b126-347805b74053.png differ
diff --git a/images/SpringSecurity/481b88aa-028d-4392-8c0a-365f1d0e2ae9.png b/images/SpringSecurity/481b88aa-028d-4392-8c0a-365f1d0e2ae9.png
new file mode 100644
index 0000000..d834d06
Binary files /dev/null and b/images/SpringSecurity/481b88aa-028d-4392-8c0a-365f1d0e2ae9.png differ
diff --git a/images/SpringSecurity/4beaa02f-a93d-4d95-9ad1-0d7213cb0e46.png b/images/SpringSecurity/4beaa02f-a93d-4d95-9ad1-0d7213cb0e46.png
index 3627695..c852b01 100644
Binary files a/images/SpringSecurity/4beaa02f-a93d-4d95-9ad1-0d7213cb0e46.png and b/images/SpringSecurity/4beaa02f-a93d-4d95-9ad1-0d7213cb0e46.png differ
diff --git a/images/SpringSecurity/4c9c302d-2ce0-4b5b-beb6-c76d2e94038f.png b/images/SpringSecurity/4c9c302d-2ce0-4b5b-beb6-c76d2e94038f.png
new file mode 100644
index 0000000..037ab1a
Binary files /dev/null and b/images/SpringSecurity/4c9c302d-2ce0-4b5b-beb6-c76d2e94038f.png differ
diff --git a/images/SpringSecurity/4d84fe43-2646-4a6f-a580-f39f6416d02d.png b/images/SpringSecurity/4d84fe43-2646-4a6f-a580-f39f6416d02d.png
new file mode 100644
index 0000000..c8a728f
Binary files /dev/null and b/images/SpringSecurity/4d84fe43-2646-4a6f-a580-f39f6416d02d.png differ
diff --git a/images/SpringSecurity/51ba02f0-bae6-4c08-9adf-7ee0f12b05d3.png b/images/SpringSecurity/51ba02f0-bae6-4c08-9adf-7ee0f12b05d3.png
new file mode 100644
index 0000000..9dd66b8
Binary files /dev/null and b/images/SpringSecurity/51ba02f0-bae6-4c08-9adf-7ee0f12b05d3.png differ
diff --git a/images/SpringSecurity/522574e3-bacc-4794-a17e-492bc2b4457d.png b/images/SpringSecurity/522574e3-bacc-4794-a17e-492bc2b4457d.png
new file mode 100644
index 0000000..5f118d6
Binary files /dev/null and b/images/SpringSecurity/522574e3-bacc-4794-a17e-492bc2b4457d.png differ
diff --git a/images/SpringSecurity/52390725-d87d-42b1-9071-ea21e445e1e6.png b/images/SpringSecurity/52390725-d87d-42b1-9071-ea21e445e1e6.png
new file mode 100644
index 0000000..2815652
Binary files /dev/null and b/images/SpringSecurity/52390725-d87d-42b1-9071-ea21e445e1e6.png differ
diff --git a/images/SpringSecurity/558b8b1c-be32-44c4-8d8f-5f0d231741f8.png b/images/SpringSecurity/558b8b1c-be32-44c4-8d8f-5f0d231741f8.png
new file mode 100644
index 0000000..d95c2fc
Binary files /dev/null and b/images/SpringSecurity/558b8b1c-be32-44c4-8d8f-5f0d231741f8.png differ
diff --git a/images/SpringSecurity/56ac5128-eab7-4b92-912f-ff50bac68a4f.png b/images/SpringSecurity/56ac5128-eab7-4b92-912f-ff50bac68a4f.png
index 997a4b9..dd655f9 100644
Binary files a/images/SpringSecurity/56ac5128-eab7-4b92-912f-ff50bac68a4f.png and b/images/SpringSecurity/56ac5128-eab7-4b92-912f-ff50bac68a4f.png differ
diff --git a/images/SpringSecurity/6724647c-34ee-4a57-8cfa-b46f57400d14.png b/images/SpringSecurity/6724647c-34ee-4a57-8cfa-b46f57400d14.png
index 2686cc8..a7a708b 100644
Binary files a/images/SpringSecurity/6724647c-34ee-4a57-8cfa-b46f57400d14.png and b/images/SpringSecurity/6724647c-34ee-4a57-8cfa-b46f57400d14.png differ
diff --git a/images/SpringSecurity/6b1aded6-5229-47ba-b192-78a7c2622b8c.png b/images/SpringSecurity/6b1aded6-5229-47ba-b192-78a7c2622b8c.png
index 4936797..ab3c047 100644
Binary files a/images/SpringSecurity/6b1aded6-5229-47ba-b192-78a7c2622b8c.png and b/images/SpringSecurity/6b1aded6-5229-47ba-b192-78a7c2622b8c.png differ
diff --git a/images/SpringSecurity/6c58e27d-dd29-48fc-b597-8067e1c97786.png b/images/SpringSecurity/6c58e27d-dd29-48fc-b597-8067e1c97786.png
new file mode 100644
index 0000000..6d19930
Binary files /dev/null and b/images/SpringSecurity/6c58e27d-dd29-48fc-b597-8067e1c97786.png differ
diff --git a/images/SpringSecurity/6c72c09b-742c-4415-851a-8ca5292a4969.png b/images/SpringSecurity/6c72c09b-742c-4415-851a-8ca5292a4969.png
new file mode 100644
index 0000000..bfce86e
Binary files /dev/null and b/images/SpringSecurity/6c72c09b-742c-4415-851a-8ca5292a4969.png differ
diff --git a/images/SpringSecurity/6e009bf1-aba3-4b89-8e86-d3d110e0f4a7.png b/images/SpringSecurity/6e009bf1-aba3-4b89-8e86-d3d110e0f4a7.png
new file mode 100644
index 0000000..0fe0854
Binary files /dev/null and b/images/SpringSecurity/6e009bf1-aba3-4b89-8e86-d3d110e0f4a7.png differ
diff --git a/images/SpringSecurity/6eca7b58-80f9-4e98-8483-62b4ef751854.png b/images/SpringSecurity/6eca7b58-80f9-4e98-8483-62b4ef751854.png
new file mode 100644
index 0000000..9c3c12e
Binary files /dev/null and b/images/SpringSecurity/6eca7b58-80f9-4e98-8483-62b4ef751854.png differ
diff --git a/images/SpringSecurity/7842f83d-5417-4cb2-bb30-d70f98c3053f.png b/images/SpringSecurity/7842f83d-5417-4cb2-bb30-d70f98c3053f.png
new file mode 100644
index 0000000..bf46827
Binary files /dev/null and b/images/SpringSecurity/7842f83d-5417-4cb2-bb30-d70f98c3053f.png differ
diff --git a/images/SpringSecurity/870891e9-f8ea-4097-98c9-829b1cdcf145.png b/images/SpringSecurity/870891e9-f8ea-4097-98c9-829b1cdcf145.png
new file mode 100644
index 0000000..cb844fb
Binary files /dev/null and b/images/SpringSecurity/870891e9-f8ea-4097-98c9-829b1cdcf145.png differ
diff --git a/images/SpringSecurity/895afead-ea6b-4ac6-8138-fbe0a223daf9.png b/images/SpringSecurity/895afead-ea6b-4ac6-8138-fbe0a223daf9.png
new file mode 100644
index 0000000..fd35893
Binary files /dev/null and b/images/SpringSecurity/895afead-ea6b-4ac6-8138-fbe0a223daf9.png differ
diff --git a/images/SpringSecurity/8d05ac54-f034-47d4-b750-67b2e3b3cd14.png b/images/SpringSecurity/8d05ac54-f034-47d4-b750-67b2e3b3cd14.png
new file mode 100644
index 0000000..18f3a01
Binary files /dev/null and b/images/SpringSecurity/8d05ac54-f034-47d4-b750-67b2e3b3cd14.png differ
diff --git a/images/SpringSecurity/8e1ac9db-5987-484d-abf4-4c6535c60cc6.png b/images/SpringSecurity/8e1ac9db-5987-484d-abf4-4c6535c60cc6.png
index 7adb5f4..b5eaa8f 100644
Binary files a/images/SpringSecurity/8e1ac9db-5987-484d-abf4-4c6535c60cc6.png and b/images/SpringSecurity/8e1ac9db-5987-484d-abf4-4c6535c60cc6.png differ
diff --git a/images/SpringSecurity/8efa0b1c-2b32-4d5b-9655-985374326e10.png b/images/SpringSecurity/8efa0b1c-2b32-4d5b-9655-985374326e10.png
index 0c1f7ac..0ad925f 100644
Binary files a/images/SpringSecurity/8efa0b1c-2b32-4d5b-9655-985374326e10.png and b/images/SpringSecurity/8efa0b1c-2b32-4d5b-9655-985374326e10.png differ
diff --git a/images/SpringSecurity/90d3e369-510f-45cb-982d-241d2eedb55c.png b/images/SpringSecurity/90d3e369-510f-45cb-982d-241d2eedb55c.png
index 6bf01be..cd38744 100644
Binary files a/images/SpringSecurity/90d3e369-510f-45cb-982d-241d2eedb55c.png and b/images/SpringSecurity/90d3e369-510f-45cb-982d-241d2eedb55c.png differ
diff --git a/images/SpringSecurity/964ec4a4-6039-4205-8a87-ea2febcc00b6.png b/images/SpringSecurity/964ec4a4-6039-4205-8a87-ea2febcc00b6.png
new file mode 100644
index 0000000..0f9a502
Binary files /dev/null and b/images/SpringSecurity/964ec4a4-6039-4205-8a87-ea2febcc00b6.png differ
diff --git a/images/SpringSecurity/97b6f22c-414d-4a16-aa8e-c3deece2f7cd.png b/images/SpringSecurity/97b6f22c-414d-4a16-aa8e-c3deece2f7cd.png
new file mode 100644
index 0000000..23ad9f9
Binary files /dev/null and b/images/SpringSecurity/97b6f22c-414d-4a16-aa8e-c3deece2f7cd.png differ
diff --git a/images/SpringSecurity/a20e06a4-5a43-4edf-bea1-53fc9bc929e9.png b/images/SpringSecurity/a20e06a4-5a43-4edf-bea1-53fc9bc929e9.png
new file mode 100644
index 0000000..5ab4f1f
Binary files /dev/null and b/images/SpringSecurity/a20e06a4-5a43-4edf-bea1-53fc9bc929e9.png differ
diff --git a/images/SpringSecurity/a5c61feb-ca72-4768-94bd-1b0a8cf8af70.png b/images/SpringSecurity/a5c61feb-ca72-4768-94bd-1b0a8cf8af70.png
new file mode 100644
index 0000000..07d38dd
Binary files /dev/null and b/images/SpringSecurity/a5c61feb-ca72-4768-94bd-1b0a8cf8af70.png differ
diff --git a/images/SpringSecurity/c365e5ab-a7a3-4ebf-8a25-09cd2e049f22.png b/images/SpringSecurity/c365e5ab-a7a3-4ebf-8a25-09cd2e049f22.png
new file mode 100644
index 0000000..563d3af
Binary files /dev/null and b/images/SpringSecurity/c365e5ab-a7a3-4ebf-8a25-09cd2e049f22.png differ
diff --git a/images/SpringSecurity/c7ef78df-c2ab-4f89-b5ad-45561a91ffcc.png b/images/SpringSecurity/c7ef78df-c2ab-4f89-b5ad-45561a91ffcc.png
new file mode 100644
index 0000000..64f3a48
Binary files /dev/null and b/images/SpringSecurity/c7ef78df-c2ab-4f89-b5ad-45561a91ffcc.png differ
diff --git a/images/SpringSecurity/ccd16b38-d724-4c03-949e-3b6ba03268a9.png b/images/SpringSecurity/ccd16b38-d724-4c03-949e-3b6ba03268a9.png
new file mode 100644
index 0000000..34556a7
Binary files /dev/null and b/images/SpringSecurity/ccd16b38-d724-4c03-949e-3b6ba03268a9.png differ
diff --git a/images/SpringSecurity/cd7aee86-66f8-4197-99d1-1c9275e33bee.png b/images/SpringSecurity/cd7aee86-66f8-4197-99d1-1c9275e33bee.png
new file mode 100644
index 0000000..cd6ff94
Binary files /dev/null and b/images/SpringSecurity/cd7aee86-66f8-4197-99d1-1c9275e33bee.png differ
diff --git a/images/SpringSecurity/d6bd19a2-08d3-4ba6-921c-5b5f57370a16.jpg b/images/SpringSecurity/d6bd19a2-08d3-4ba6-921c-5b5f57370a16.jpg
new file mode 100644
index 0000000..6783aa4
Binary files /dev/null and b/images/SpringSecurity/d6bd19a2-08d3-4ba6-921c-5b5f57370a16.jpg differ
diff --git a/images/SpringSecurity/d6e99143-6207-43a5-8d04-f0c81baa11b4.png b/images/SpringSecurity/d6e99143-6207-43a5-8d04-f0c81baa11b4.png
index 776b06e..b51f856 100644
Binary files a/images/SpringSecurity/d6e99143-6207-43a5-8d04-f0c81baa11b4.png and b/images/SpringSecurity/d6e99143-6207-43a5-8d04-f0c81baa11b4.png differ
diff --git a/images/SpringSecurity/eb7a5916-4049-4682-9a11-10f1f1f94c74.png b/images/SpringSecurity/eb7a5916-4049-4682-9a11-10f1f1f94c74.png
new file mode 100644
index 0000000..432a566
Binary files /dev/null and b/images/SpringSecurity/eb7a5916-4049-4682-9a11-10f1f1f94c74.png differ
diff --git a/images/SpringSecurity/ed65fd2a-8a9f-4808-bc16-36128b4af47a.png b/images/SpringSecurity/ed65fd2a-8a9f-4808-bc16-36128b4af47a.png
new file mode 100644
index 0000000..826fbb6
Binary files /dev/null and b/images/SpringSecurity/ed65fd2a-8a9f-4808-bc16-36128b4af47a.png differ
diff --git a/images/SpringSecurity/ef28372b-de89-46ff-8679-8b8feca04a7a.png b/images/SpringSecurity/ef28372b-de89-46ff-8679-8b8feca04a7a.png
new file mode 100644
index 0000000..7cd94e8
Binary files /dev/null and b/images/SpringSecurity/ef28372b-de89-46ff-8679-8b8feca04a7a.png differ
diff --git a/images/SpringSecurity/f045b025-bd97-4222-8a02-51634be6745b.png b/images/SpringSecurity/f045b025-bd97-4222-8a02-51634be6745b.png
index 1726d21..f2e7a0b 100644
Binary files a/images/SpringSecurity/f045b025-bd97-4222-8a02-51634be6745b.png and b/images/SpringSecurity/f045b025-bd97-4222-8a02-51634be6745b.png differ
diff --git a/images/SpringSecurity/fb22f2ca-3d9a-420f-b77a-f9c0f737d9ad.png b/images/SpringSecurity/fb22f2ca-3d9a-420f-b77a-f9c0f737d9ad.png
new file mode 100644
index 0000000..2227b24
Binary files /dev/null and b/images/SpringSecurity/fb22f2ca-3d9a-420f-b77a-f9c0f737d9ad.png differ
diff --git a/images/SpringSecurity/fcdab503-2735-46bd-a5b6-226dc348e78c.png b/images/SpringSecurity/fcdab503-2735-46bd-a5b6-226dc348e78c.png
new file mode 100644
index 0000000..a6fe487
Binary files /dev/null and b/images/SpringSecurity/fcdab503-2735-46bd-a5b6-226dc348e78c.png differ
diff --git a/images/SpringSecurity/image-20210811091659121.png b/images/SpringSecurity/image-20210811091659121.png
index 981fbbd..31e8f3f 100644
Binary files a/images/SpringSecurity/image-20210811091659121.png and b/images/SpringSecurity/image-20210811091659121.png differ
diff --git a/images/SpringSecurity/image-20210811091719470.png b/images/SpringSecurity/image-20210811091719470.png
index 751cf47..9b2084d 100644
Binary files a/images/SpringSecurity/image-20210811091719470.png and b/images/SpringSecurity/image-20210811091719470.png differ
diff --git a/images/SpringSecurity/image-20210811091755498.png b/images/SpringSecurity/image-20210811091755498.png
index 82e2412..5ec049f 100644
Binary files a/images/SpringSecurity/image-20210811091755498.png and b/images/SpringSecurity/image-20210811091755498.png differ
diff --git a/images/SpringSecurity/image-20210811091815473.png b/images/SpringSecurity/image-20210811091815473.png
index c907352..669662f 100644
Binary files a/images/SpringSecurity/image-20210811091815473.png and b/images/SpringSecurity/image-20210811091815473.png differ
diff --git a/images/SpringSecurity/image-20210811091833065.png b/images/SpringSecurity/image-20210811091833065.png
index dad2cb9..ee27f6f 100644
Binary files a/images/SpringSecurity/image-20210811091833065.png and b/images/SpringSecurity/image-20210811091833065.png differ
diff --git a/images/SpringSecurity/image-20210811092048784.png b/images/SpringSecurity/image-20210811092048784.png
index ffb58f9..4ca4f56 100644
Binary files a/images/SpringSecurity/image-20210811092048784.png and b/images/SpringSecurity/image-20210811092048784.png differ