spring-security

 我来答
世纪网络17
2022-06-17 · TA获得超过5910个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:138万
展开全部

在使用spring-security时,我们应该去思考一些问题:

客户端发起请求到最终的servlet可能会经过如下过程:

我们可以思考一下,权限认证是不是也是其中某一个或者某几个filter呢?

DelegatingFilterProxy并不是SpringSecurity提供,而是Spring框架本身就存在的。它继承自GenericFilterBean,Servlet容器在启动的时候就会执行GenericFilterBean的init方法。

我们看看子类DelegatingFilterProxy的initFilterBean()方法里面做了什么事

在debug模式下我们可以看到真实的具体信息

通过上面源码的解析我们能够发现DelegatingFilterProxy这个过滤器在初始的时候从Spring容器中获取了 FilterChainProxy 这个过滤器链的代理对象,并且把这个对象保存在了DelegatingFilterProxy 的delegate属性中。那么当请求到来的时候会执行DelegatingFilterProxy的doFilter方法,那么我们就可以来看下这个方法里面又执行了什么

实际流程变为:

我们需要了解的概念,SpringSecurity中可以存在多个过滤器链,而每个过滤器链又可以包含多个过滤器

SpringSecurity中的主要过滤器

先前我们讲到,会构造出一个虚拟链路执行对应的filter。 VirtualFilterChain

decide方法在做投票选举,第一次的时候回抛出AccessDeniedException异常,而抛出的异常会
被ExceptionTranslationFilter中的catch语句块捕获,进而执行handleSpringSecurityException方法。

基于SpringBoot的自动装配,第三方框架要加载的信息在spring.factories中

这三个类中与DelegatingFilterProxy有关系的是SecurityFilterAutoConfiguration

我们来看一下这里面的构建逻辑是如何处理的

从ServletContextInitializer.onStartU()开始分析

至此,我们可以看到在springboot中,通过DelegatingFilterProxyRegistrationBean创建了一个,DelegatingFilterProxy过滤器并且执行了拦截地址是 /*。后续的流程就和xml流程一致,通过FilterChainProxy处理。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式