美文网首页
spring security(2)

spring security(2)

作者: 盛京最帅得仔 | 来源:发表于2019-07-05 14:50 被阅读0次

之前写过一篇关于spring security简单介绍的文档,但是总觉得对security还没有真正的了解!借着工作不忙时,又重新研究了一遍,以下把我研究的成果分享一下!

之前已经介绍过spring security是一个关于权限的一个框架!它的核心就是Filter,就是利用各个Filte进行用户的校验以及权限的控制!!!!

首先介绍spring security自带的Filter:

以上图片截取自spring seccurity 官方文档:

https://docs.spring.io/spring-security/site/docs/5.0.0.M1/reference/htmlsingle/#ns-custom-filters

图上的所有Filter都是security自带的,默认的执行顺序也是从上到下顺序执行!至于是怎么控制的,下面会有介绍!

问题1:security 自带的Filter如何启动,以及什么时候执行?

我们都知道,要使用security 会用到一个实现了WebSecurityConfigurerAdapter的配置类(以下是我的配置类);

首先spring security 自带的Filter 是通过http对象配置的(绿色部分),具体如何配置请看上面的截图;

例如:

http.requiresChannel() 会把ChannelProcessingFilter 加入到FilterChain中;

http.formLogin().loginPage("/login").defaultSuccessUrl("/user") 会把UsernamePasswordAuthenticationFilter 加入到FilterChain中;

SecurityContextPersistenceFilter 默认会自动加入FilterChain中;

这样你想使用哪儿些Filter,就可以自行配制了,如果自带的Filter不满足你的需求,你也可以加入自己的Filter(如何加入自定义的Filter下章节讲)

理解这一点很重要!!!如果这个弄明白了,spring security就理解一大半了,我之前就是这块没搞清除,所以一直感觉理解不透彻!

其实spring security 默认配置了一些Filter,具体看源码:

以上可以看出,spring security 除了自带Filter外,默认配置了UsernamePasswordAuthenticationFilter  和 BasicAuthenticationFilter 这就是为什么你什么也没有配置,登陆时就会走UsernamePasswordAuthenticationFilter  的原因(我上一章节将的大体流程就是基于这个讲解的);

红色部分:为我测试security Filter执行顺序使用到的,你也可以自己debug试试,看看哪儿些Filter会执行;

以上如果理解了,我认为基于spring security实现用户的登陆功能已经没有问题了;

问题2:security 如何进行权限控制?

之前已经说了,spring security 最主要的就是Filter,那么控制权限也是由Filter完成的;

FilterSecurityInterceptor:(就是主要控制权限的Filer)

通过源码跟踪,访问受保护的资源都会走到这里:

绿色源码部分:

从截图可以看出如果attributes不为null时(如果为null则说明该资源公开访问)是调用了AbstractAccessDecisionManager 实现类的decide(authenticated, object, attributes)实现的权限控制;继续跟代码....

通过debug得知最终调用了AffirmativeBased类的decide(authenticated, object, attributes)

继续跟....

终于要见亮了,原来最终判定权限的是绿色部分这行代码;继续吧.....

终于要看到真面目了。。。。

1.是验证通过用户的一些信息,包括用户名和用户权限

2.为资源访问的url

3.为该资源需要的权限

然后就很简单喽~经过简单的比较就可以知道该用户是否有权限访问该资源了!

基于以上跟踪源码画一个简单的流程图:

参考文章:

https://blog.csdn.net/shenchaohao12321/article/details/87355803

https://blog.csdn.net/gxftry1st/article/details/70237480

相关文章

网友评论

      本文标题:spring security(2)

      本文链接:https://www.haomeiwen.com/subject/usnshctx.html