当前位置:   article > 正文

SpringSecurity——基本原理_springsecurity原理

springsecurity原理

一、Spring Security的理解

  • Spring Security最核心的是过滤器链,也就是一组过滤器(Filter),所有的访问服务的请求都会经过spring security的过滤器,服务的响应也会经过spring security的过滤器再返回给客户端,并且这些过滤器在系统启动时springboot会自动都配置完成。

二、Spring Security基本原理

1、Spring Security基本原理图解

在这里插入图片描述
2、spring security核心过滤器

(1)、UsernamePasswordAuthenticationFilter过滤器

  • 主要用于处理formLogin表单登录。
  • 先检查请求是否是登录请求,并且检查登录请求中是否带有用户名和密码,
  • 如果有,这个过滤器就会尝试用这个用户名和密码进行登录,
  • 如果没有,就回放过该请求,交给下一个过滤器处理

(2)、BasicAuthenticationFilter过滤器

  • 主要用于处理httpBasic登录
  • 先检查请求头中是否有basic开头Authentication的信息,
  • 如果有,会尝试进行base64解码,然后取出用户名和密码,尝试进行登录
  • 如果没有,就回放过该请求,交给下一个过滤器处理

(3)、ExceptionTranslationFilter过滤器

  • 用于捕获FilterSecurityInterceptor过滤器抛出的异常。
  • ExceptionTranslationFilter 位于FilterSecurityInterceptor过滤器之前的位置。

(4)、FilterSecurityInterceptor过滤器

  • 此过滤器是Spring Security的最后一个 Filter,获取当前 request 对应的权限配置,调用访问控制器进行鉴权操作。
  • 以上任何一个过滤器成功完成登录后,会在请求上做一个标记,标记认证成功,最后会到FilterSecurityInterceptor过滤器
  • FilterSecurityInterceptor是整个spring security过滤器链的最后一环
  • FilterSecurityInterceptor后就是我们自己写的controller控制层的REST服务
  • FilterSecurityInterceptor决定当前的请求能否访问我们写的REST服务

3、FilterSecurityInterceptor依据什么判断当前的请求能否访问我们写的REST服务

  • 根据代码中的配置,即自定义的SecurityConfig配置类中继承WebSecurityConfigurerAdapter类并重写的configure方法中的内容
  • configure方法中的内容最终都会放到FilterSecurityInterceptor过滤器中,判断的结果是通过还是不通过
  • 如果通过,会跳访问我们写的REST服务
  • 如果不通过,会根据具体不能访问的原因抛出对应的异常

4、FilterSecurityInterceptor抛出的异常如何解决

  • 通过ExceptionTranslationFilter过滤器来捕获FilterSecurityInterceptor过滤器抛出的异常。
  • ExceptionTranslationFilter 位于FilterSecurityInterceptor过滤器之前的位置。

5、总结

  • 以上就是spring security最核心的基本原理,spring security提供的所有的功能、特性都是建立在此过滤器链上。
  • 比如微信登录、qq登录、短信验证码登录都是在此过滤器链上添加过滤器,来支持不同的身份认证方式
  • 在程序实际运行时候,过滤器链上的过滤器不止UsernamePasswordAuthenticationFiletr、BasicAuthenticationFilter、ExceptionTranslationFilter、FilterSecurityInterceptor这四种过滤器,还有其他的过滤器。

三、Spring Security源码解析

1、Spring Security过滤器源码

  • UsernamePasswordAuthenticationFilter过滤器源码解析

    在这里插入图片描述

  • ExceptionTranslationFilter过滤器源码解析

    在这里插入图片描述

  • FilterSecurityInterceptor过滤器源码解析
    在这里插入图片描述

2、启动springboot项目,发送请求,查看过滤器执行顺序

  • 创建一个Security配置类,formLogin表单登录的配置,如下图:
    在这里插入图片描述

  • 启动项目,如下图

    在这里插入图片描述

  • 浏览器执行查询请求,如下图:

    在这里插入图片描述

  • 由下图可知,因为不是表单登录,直接执行FilterSecurityInterceptor过滤器,然后执行 ExceptionTranslationFilter过滤器处理FilterSecurityInterceptor过滤器抛出的异常。在这里插入图片描述

  • 在这里插入图片描述

  • 然后跳转到SpringSecurity表单登录页面,如下图:
    在这里插入图片描述

  • 由下图可知,在SpringSecurity表单登录页面输入用户名和密码,点击登录,先执行UsernamePasswordAuthenticationFilter过滤器,然后执行FilterSecurityInterceptor过滤器,
    在这里插入图片描述
    在这里插入图片描述

  • 最后输入rest服务输出的结果,如下图:

    在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/67647
推荐阅读
相关标签
  

闽ICP备14008679号