【Spring Security】基本原理(一)

介绍

SpringSecurity核心功能:认证(身份校验,你是谁),授权(你能干什么),攻击防护(防止伪造身份)


原理

这里写图片描述

REST API:相当于应用的controller,用户的增删该查的一些服务
Spring Security过滤器链:这个是最核心的部分,相当于一组Filter,请求和响应都会经过过滤器,这些过滤器在系统启动的时候,Spring boot会自动把它们都配置进去
绿色部分:
代表过滤器,每个方块都代表一个过滤器,UsernamePasswordAuthenticationFilter用来处理表单登录的,BasicAuthenticationFilter用来处理HTTPBasic登录的
绿色部分过滤器主要功能:检查当前的请求里面是不是有过这个过滤器所需要的信息,比如说:UsernamePasswordAuthenticationFilter这个过滤器来说:首先检查当前的请求是不是一个登录请求,然后再这个请求里面带没带用户名和密码,如果带了用户名和密码,这个过滤器就会用用户名和密码尝试去登录,如果这个请求里面没有带用户名和密码,继续进行下面的过滤器,下一个过滤器比如说是BasicAuthenticationFilter,这个过滤器会检查请求的请求头中是不是有Basic开头的authentication的信息,如果有的话,会尝试拿出来做basic流的字节码然后从中取出用户名和密码尝试做登录,springsecurity还提供了许多其他的认证方式,任何一个过滤器,成功的完成用户登录以后,都会再这个请求上做个标记,表明这个用户已经认证成功了,请求经历过这些过滤器后,就会到达这个写橘黄色的拦截器上比如FilterSecurityInterceptor,这个拦截器是整个Spring Security过滤器的最后一环,是最终的守门人,在它身后是我们自己写的controller的rest服务,在该拦截器中,它会去决定当前的请求能不能去访问后面真正的服务,判断的依据类似于下面:

这里写图片描述
上面的配置表明(任何请求都需要认证),就会去判断当前的请求是不是经过了前面某一个过滤器的身份认证,可以定义一些特别复杂的规则,将这些规则放到Filter SecurityInterceptor里面,这个过滤器会根据这些规则去判断,判断的结果是通过还是不同过,通过的话,请求就过去了,就能访问最终的服务了,如果不过,根据不过的原因会抛出不同的异常,比如没有认证的异常,或者该请求是给VIP用户用的,您不是VIP用户。异常抛出去以后,这个过滤器的前面还有蓝色的过滤器ExceptionTranslationFilter,这个过滤器它的作用就是用来捕获橘黄色过滤器所抛出的异常,蓝色的过滤器会根据抛出的异常做相应的处理,比如说你没有登录就访问,它会根据前面的配置引导你先去登录,比如我前面配置了UsernamePasswordFilter过滤器,这样就会把用户引导到登录页面上,比如说我前面配置了BasicAuthenticationFilter这个过滤器,这样就会在浏览器弹出一个窗口的调用,提醒用户输入用户名和密码,这就是Spring Security的一个基本原理,它应用的所用功能特性都是建立在这个过滤器链上的
在过滤器链上,绿色的部分是可以通过配置来实现的,如下:

这里写图片描述
上面是两种认证方式:
一种是httpbasic认证;还有一种是fromlogin表单认证
注意:过滤器链上的顺序不能更改,可以自定义加入其他过滤器。


小结

上面是一些文字的描述,接下来会从源码来分析。

猜你喜欢

转载自blog.csdn.net/zlt995768025/article/details/80141913