大家好,我是Leo哥🫣🫣🫣,上一节我们通过一个HelloWorld案例,以代码的方式实现了我们项目添加登录鉴权功能,只是通过一个就轻松实现了这个功能。那么他其中的原理是什么呢,带着疑问,我们后面几节课主要学习一下如何实现这些的原理。好了,话不多说让我们开始吧😎😎😎。
后面几篇文章,我们会带着这些问题去研究SpringSecurity,并找出问题的答案。
一个请求发出之后的基本流程是怎么样的呢,我们的请求是如何被拦截的呢,下面我们简单的来看一下流程图。
流程详解:
SpringSecurity对于Servlet的支持是基于Servlet Filter的。也就是说SpringSecurity的实现技术手段也是Filter。
SpringSecurity 的 Servlet 支持是基于 Servlet Filter 的,因此首先大致了解一下 Filter 的作用是有帮助的。下图显示了单个 HTTP请求的处理程序的典型分层。
客户端向应用程序发送请求,容器创建一个 FilterChain
,其中包含 Filter
实例和应处理 HttpServletRequest
是 DispatcherServlet
的实例。最多一个 Servlet
可以处理单个 HttpServletRequest
和 HttpServletResponse
。然而,多个 Filter
可用于:
Filter
instances or the Servlet
from being invoked. In this case, the Filter
typically writes the HttpServletResponse
.
防止调用下游 Filter
实例或 Servlet
。在这种情况下, Filter
通常写入 HttpServletResponse
。HttpServletRequest
or HttpServletResponse
used by the downstream Filter
instances and the Servlet
.
修改下游 Filter
实例和 Servlet
使用的 HttpServletRequest
或 HttpServletResponse
。public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
// do something before the rest of the application
chain.doFilter(request, response); // invoke the rest of the application
// do something after the rest of the application
}
由于 Filter
仅影响下游 Filter
实例和 Servlet
,因此调用每个 Filter
的顺序非常重要。
以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。
如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。