Spring Security(maven项目) 3.0.2.5版本上
前言:
通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度
温故知新:
在前五篇中,我们分别完成以下内容:
第一篇:初步认识Spring-Security框架
第二篇:初步体验Spring-Security框架
第三篇:进一步认识Spring-Security框架
第四篇 - 上:初步认识Security认证架构
第四篇 - 下:初步体验Security认证架构
在本次温故知新中,我们将第一篇中的三个视角进行修改
在第一篇中,我们从三个视角去认识Spring-Security框架——分别是:是什么,为什么,怎么用
其中对为什么的描述十分抽象,十分难懂,所以进行了修改
原本
迭代后
旧内容:
通过三个独立的视角去审视问题,看到的都是不连贯的答案
新内容:
通过看——达到第一个阶段——是什么
通过实践-思考-实践-思考——达到第二个阶段——为什么
通过思考去指导实践——达到第三个阶段——怎么用
一个阶段一个阶段,一个问题一个答案,每个答案能连城一条线,有了这条线,使用Security也会更加简单
第二,第三篇的内容没有过多的翻新
第四篇的翻新来源于其认证架构而不是框架架构,架构和框架的区别就是一个是骨头,一个带肉的骨头,SecurityContextHolder是一个带有肉的骨头,是骨头中的一部分内容
真实原因:
在这一期温故知新中,作者得到了一个结论——SecurityContextHolder是Security为什么是一个强大且易于使用的地基
然后第五篇标题为用户/密码 认证,一不小心多看了一眼官方文档目录,SecurityContextHolder是认证架构里的
这么一看,之前的三角视角就改为了现在的阶段;这么一看,上面的结论也就无用了
抽象之后就是这样↓
正片:
第五篇:读取用户名/密码
第六篇:Security架构图
第五篇:读取表单登录用户名/密码
我们将第五篇,第六篇合在一起讲
Tip:表单是什么,是通过HTML里的<form></form>标签获取的
Security架构图
这是一个经典的Filter过滤器,也是Security的基础架构图
如果你看过之前的温故知新,你应该对这张图有映像
这张图是我们上一轮实践的结论图
Client相对于前端客户端,前端客户端发送请求,会先进入到我们的Spring-Security框架。
拿上一期的实践,类比:
在第二篇的体验Security中,我们在不完成登录操作就无法访问其他页面;拿某乎,CSDN来类比,某乎的内容需要登录了才能看完,CSDN有一些文章需要关注才能看完
例如,我们在看上面的平台文章,平台向客户端发生请求信息,如果请求信息没有通过认证,那么这个请求将会失效
这两个图是对上面的抽象化
在实际体验中,确确实实是这样,没有登录、关注——确实是没办法看到想看的文章
通过类比,我们还能知道Vip就是这样来的,为什么Vip会有特权,因为在认证信息中包含了这类信息认证
考考读者,除了上面的内容还有没有类似的
可以用常识,认识,可以用现实,window系统,安卓
去过动物园吧,没?进过小区吧,没?上个学吧,有!有喜欢的菜吧,有!过滤水的过滤器见过吧,没?总有一个你干过的
上学要进校门,校门都有一个保安,保安就相对于认证信息,通过了就放我们进,没通过就不让我们进
喜欢吃什么菜,就是由自己的爱好选择的,这些菜带有认证信息,喜欢吃!通过,吃,不喜欢吃,看都不看
官方也是这么认为的,只不过,官方的内容更加详细
之前的内容错了,因为这个信息判断是在客户端里面进行的,而不是客户端,前端发送一个带有认证信息的请求,进入到客户端,进入请求信息进入到容器内,一层一层过滤
我知道你没见过,那我整一个简单的给你看,水就相对于这里面的请求,这个装满东西的杯子就是容器,容器里的内容就是一个个过滤器,过滤器的作用是什么?
判断出不可过滤的内容,过滤水是怎么判断的?
通过物质的属性,去判断,例如木头渣子是怎么在小石头被过滤掉的?
小石头组成的过滤层有缝隙,这些缝隙正好可以防止木头渣子
用一个最简单的代码来表示就是
IF(x != "小木头"){
return "通过"
}
简易版本
那么过滤器顺序重要吗?
现实中你可能拿不出同样的容器,但是官方告诉我们,顺序很重要
为什么十分重要呢?
就拿本平台的内容,登录和关注是两个Filter过滤器
你登录了能看到一部分内容,你不登录也能看到一部分内容
第一层:登录
第二层:关注
其中不登录也能看到内容,也就是第一层形同虚设
第二层,进行了内容覆盖,不通过的只能看到百分之20,剩下百分之80需要进行过滤
那么在我们具体实践中,发现没?其实不登录是没办法进行关注,那他们就是第一层还有一个额外的过滤物质
第一层的认证和第二层的认证是紧密关联的
虽然不够完整,但是这是一个大概的内容
小结:
我们认识了Security架构的基础
这是我们内化后的内容
继续
看之前先翻译
第一句:FilterChain Usage Example FilterChain 使用示例
第二句:do something before the rest of the application 在应用程序的其余部分之前执行某些操作
第三句:invoke the rest of the application 调用应用程序的其余部分
第四局:do something after the rest of the application 在应用程序的其余部分之后执行某些操作
以防大家不认识三个形参:ServletRequest 请求、ServletResponse 响应、FilterChain 过滤容器
请求,响应应该都没问题,这个链在前面的出现过
容器
内化一下就是:
现在回来看这段代码就容易了
在过滤器前,需要使用一些手段获取请求,即过滤器前
调用FilterChain容器,传入请求,或者响应处理结果
其余操作
小结:
过滤容器由三部分组成,请求,响应,若干个过滤器
代码的运行是有先后逻辑的,所以过滤器的顺序在代码的诞生就已经决定了
在作者的观点里,始终秉承编程语言是继承之自然语言之优点而诞生的人机交互语言
在完成了代码的认识后,可以找到现实中相对应的事物进行对比,学习不仅需要广度还需要深度,但是一般情况来说,有了深度就会有广度,知道了这一个事物的底层逻辑,就能知道这一类事物的底层逻辑
在这些内容中,我们完成了第一个
进行一次彻底的总结:
第一条:Security是一个强大且易于使用的框架,源于其架构之简单稳定;
第二条:其架构由三部分组成:请求,过滤器,响应;
这里我就在想,Security的过滤器可以换吗?Security的过滤器可以自定义吗?可以自定义插入吗?如果可以换,可以自定义,自定义插入那么就可以回答这句话——Security为什么是一个强大且易于使用的框架