文章目录

前言

1:几个核心问题

 2:一个关键思考

一:回顾Filter

1:过滤器概念作用

2:过滤器核心代码 

3:过滤器原理

4:过滤器链 FilterChain

二:SSC的FilterChain

1:原理

2:图示


前言

1:几个核心问题

        之前,我们引入了一下这四个问题,接下来,我们会在后续的文章中一一解答。

 2:一个关键思考

        如何实现client向server发送请求时,先检测用户是否登录,登陆了才能访问,没有登录重定向登录页面?

        如果向实现这个东西,那么客户端请求的时候就不能直接碰到web应用,而是对当前的请求进行一个登录检查,如果是已经登录那么就继续访问web资源,如果没有登录那么就返回登录页面。

        适用于这个点的功能组件,我们首先想到的就是过滤器或者叫拦截器!

SpringSecurity6从入门到上天系列第三篇:回顾Filter以及SpringSecurity6的实现原理-LMLPHP

         SpringSecurity的技术手段是怎样的呢?SpringSecurity对于Servlet的支持是基于Servlet Filter的。也就是说SSC的实现技术手段也是Filter。

一:回顾Filter

1:过滤器概念作用

        当客户端访问一个Servlet时,需要经过一系列的过滤器。这一系列的Filter和Sevlet形成了一个Filter Chain的概念。下面的图显示了单个Http请求的处理程序的典型分层

        过滤器由

SpringSecurity6从入门到上天系列第三篇:回顾Filter以及SpringSecurity6的实现原理-LMLPHP

2:过滤器核心代码 

        这个方法是必须被覆盖重写的方法。在这个方法里边chain.doFilter放行当前过滤器,进行下一步过滤器。

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
}

3:过滤器原理

        必须实现 Filter 接口过器在访问 Web 资源可以对请求进行拦截,并对请求进行预处理和后处理操作,然后将请求传递给日标资源。

        比如,强制登录过滤器,访问 web 资源时先对请求进行登录检查,已登录可以往后访问,未登录重定向回登录页。

4:过滤器链 FilterChain

        在对一个 web 资源进行拦截处理时的多个 Filter 和 web 资源组成一个FlterChain 过照链

        FilterChain 中的 doFilter() 方法非常重要,用于让 Filter 链上的当前过滤器放行,使请求或响应进入下一Filter 或 web 资源

二:SSC的FilterChain

1:原理

        SpringSecurity在实现的时候也是基于了一系列的Filter。

        其中有几个重要的:DelegatingFilterProxy(委托过滤器代理),这个是Servle容器和Spring工厂之间的桥梁。

        如果在应用的过滤器链中想使用SpringSecurity的过滤器,那么就需要DelegatingFilterProxy就在FilterChain里边。然后就往原生的Filter Chain里边注入了Spring Security的FilterChain。

2:图示

SpringSecurity6从入门到上天系列第三篇:回顾Filter以及SpringSecurity6的实现原理-LMLPHP

        具体的实现原理请查看下面的文章。 

       

11-05 20:55