1.前言
由于近期需要使用spring-security的产品,因此认识层面便不能仅仅停留在之前学校所练习的使用层面,对整个流程也需要有更加深入的认识才行。因此在周末讲相关的只是进行一个补充,同样为避免遗忘,在此记录。
2.从servlet规范说起
spring-security为应用提供安全保护,spring-web-security自然是为web应用提供安全防护。
对java程序而言,说到web,自然离不开servlet规范。依然是老生常谈的概念:filter,servlet,listener。
概念虽然简单,但是所谓换汤不换药,无论表面如何变化,它的基本骨架始终是这样,必须要明白这点。
3.spring-web,spring-webMvc,spring-web-security对比来看
这里并非为了对比而对比,作对比的目的,是为了更好的理解。(想想几年前,自己埋头将源码注释那些看了一遍,以为懂了。哎,挺汗颜的。或许再过个三五年,再看现在的我也许同样如此,但这不是我们不敢犯错的理由哈哈哈。)
spring-web对servlet规范做了一些封装,它的目的主要是协同了两个上下文: servlet容器上下文 以及 spring容器上下文。简言之,就是既满足servlet标准,又提供spirng上下文支持。
spring-webMvc通过DispatchServlet,大大增强了Servlet的功能。(基本流程不变,就是在途中定义了很多的流程,能够实现更加丰富的操作)。
spring-web-security通过DelegatingFilterProxy,增强了filter的功能。
4.spring-security在非springBoot项目中的集成使用
springBoot项目有其简便性,对使用起来很友好,但是对理解方面却不太友好。所以在使用时还是建议先通过spring项目集成的方式体验一下。现在网上的帖子很多都是基于springboot的了,在我不懈的努力下终于找到一篇,嘿嘿:
Spring security 学习记录
其中,我觉得最重要的是:
这对我理解springSecurity具有十分重要的作用。至于springWebSecuirty内部的工作流程,则跟springWebMVC内部的工作流程一致了,属于另外一个思考范畴。
5.参考文档
除了已经贴出的参考文档外,在整个思考流程中,还参考了如下的一些文档:
Spring web过滤器-各种filter讲解 ---->记录了filterchan过滤层级的协作关系,对理解过滤器协作挺重要
Spring Web DelegatingFilterProxy和Spring Security Web Filter Chain