spring-security整理

在这里插入图片描述 执行流程图

AuthenticationFilter:认证过滤器每当容器支持一种登录方式的时候,就需要在主链中添加一种该组件

Authentication:实际上就是个pojo只不过,每一种登录方式,会实现一种该组件

ExceptionTranslationFilter:处理由最终过滤器抛出的异常,一般情况下,当异常之后,将用户本次访问路径记录在securityContext中,并将用户准发到loginpage

FilterSecurityInterceptor: 守门员检查是否有authentication对象,并且是否是已经认证之后的,如果是,放行,如果不是抛异常

AbstractAuthenticationProcessingFilter:所有认证过滤器的父亲,将所有认证的逻辑共有的部分抽取到父类,前置检测当前请求是否是有当前过滤器处理的,后置判断当前认证是否成功,
如果成功,那么使用认证成功处理器处理,并且将登陆成功的依据交给rememberMeService

如果失败(登陆流程抛异常)调用登录失败处理器,并且清空securityContext在调用rememberMeService的loginfail

SuccessHandler登录成功处理器,默认重定向用户到第一次没有权限的时候访问的路径

FailureHander重定向用户到loginpage

rememberMeService:很明显他和记住我功能有关

UsernamePasswordAuthenticationFilter将前端传回来的usernamepassword打包,传给
providerManager处理

providermanager:根据传入的token遍历容器中的所有的provider,找到对应的是适配器,并调用适配器去处理当前token

AbstractUserDetailsAuthenticationProvider:先看缓存中是否有用户,如果没有,调用自实现去
找,找到之后,做了后置检测,检测四个标志位是否为true,并且判断容器中是否有
passwordencoder,如果有,使用加密匹配规则,如果没有,直接用字符串匹配前端以及数据库中的密码

DaoAuthenticationProvider: 最终查询数据库得类,搜集容器中userdetail的实现,调用loaduserbyusername方法, 返回数据库中的用户信息

AuthenticationFilter
Provider
Token

猜你喜欢

转载自blog.csdn.net/weixin_49686768/article/details/114288722