一.简介
Spring Security通过一些列的过滤器完成了用户身份认证及其授权工作,每个过滤器都有不同分工,当然这些过滤器并不是全部都一起工作,而是根据我们需要什么功能,才会选取对应的过滤器加入。
当然这些过滤器并不是直接加入web的过滤器中,而是通过一个过滤器代理完成。web过滤器中只会加入一个或多个过滤器代理,然后由这些代理负责管理哪些Security Filter需要加入进来。如下图所示:
如果有多个过滤器链代理的话,那么就会变成这样,截图如下:
二.组件介绍
2.1 Authentication(Principal)
封装用户身份信息,顶层接口,主要实现如下:
AbstractAuthenticationToken()
1. RememberMeAuthenticationToken rememberMe 登陆后封装的身份信息。
2. UsernamePasswordAuthenticationToken 用户名密码登录后封装的身份信息。
2.2 AuthenticationManager
身份认证器的代理,主要负责多个认证器的代理,管理多个AuthenticationProvider,主要实现如下:
ProviderManager (authenticate)
2.3 AuthenticationProvider
真正实现认证工作,多个provider受AuthenticationManager管理,主要实现如下:
AbstractUserDetailsAuthenticationProvider
1. DaoAuthenticationProvider
2. RememberMeAuthenticationProvider
2.4 UserDetailsService
负责定义用户信息的来源,从不同来源加载用户信息,唯一的方法:loadUserByUsername,主要实现类:
UserDetailsManager
1. InMemoryUserDetailsManager
2. JdbcUserDetailsManager
自定义
2.5 UserDetails
定义用户身份信息,比Authentication 信息更详细,主要实现:
User
一般我们自定义
2.6 SecurityContextHolder
存放和获取用户身份信息的帮助类
2.7 FilterChainProxy
Spring Securty Filter的入口,FilterChainProxy管理多个filter
2.8 AbstractHttpConfigurer
构建所有过滤器的核心组件,主要方法init()和configure(),主要实现类:
FormLoginConfigurer
CorsConfigurer
CsrfConfigurer
HttpBasicConfigurer
LogoutConfigurer ...
三.一图理清基本组件关系
《肖申克的救赎》
生命可以归结为一种简单的选择:要么忙于生存,要么赶着去死。
懦怯囚禁人的灵魂,希望可以感受自由。强者自救,圣者渡人。
希望是件美丽的东西,也许是最好的东西。美好的东西是永远不会死的。
每个人都是自己的上帝。如果你自己都放弃自己了,还有谁会救你?
《熔炉》
我们一路奋战,不是为了能改变世界,而是为了不让世界改变我们。
现实如水母,看似美好无害实质总是致命伤人。
我们来到世界上,都是孤独的旅行,即使身边有人相伴,最终也会各奔东西!
世界上最美丽最珍贵的,反而是听不见且看不清的,只有用心才能感受得到。
《教父》
人可以不断犯错,但绝不能犯要命的错。
不要憎恨你的敌人,那会影响你的判断力。
人并非生来就伟大,而是越活越伟大。
《活着》
人是为了活着本身而活着,而不是为了活着之外的任何事物而活着。
以笑的方式哭,在死亡的伴随下活着。
没有什么比时间更具有说服力了,因为时间无需通知我们就可以改变一切。
你的命是爹娘给的,你不要命了也得先去问问他们。
《我不是药神》
世界上只有一种病,穷病,这种病你没法治,你也治不过来。
人间最高贵的是善良,是对生命的致敬。
《指环王》
把手握紧,里面什么也没有;把手放开,你得到的是一切。
我宁愿和你共度凡人短暂的一生,也不愿一个人看尽这世界的沧海桑田。
20.幸福的家庭都是相似的,不幸的家庭各有各的不幸。
或许有一天,人类变得萎缩懦弱,舍弃朋友,断绝友谊,但今天决不会这样。
《饮食男女》
22.人生不能像做菜,把所有的材料都准备好了才下锅。
什么叫做“可惜”啊,要心中有个“惜”字儿,才知道可惜。
其实一家人,住在一个屋檐下,照样可以各过各的日子,可是从心里产生的那种顾忌,才是一个家之所以为家的意义。
《让子弹飞》
世界上本没有路,有了腿便有了路。
如果你活着,早晚都会死;如果你死了,你就永远活着。
赚钱嘛,不寒碜
————————————————
版权声明:本文为CSDN博主「刘德华一不小心就打代码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40991408/article/details/129711994