• 8.2SpringSecurity学习总结


    SpringSecurity的总结

    SprngSecurity就是一系列的过滤器封装,在对servlet进行请求前进行数据过滤,完成用户的认证授权操作,针对不同的路由可以使用不同的过滤器链进行过滤。具体原理图如下:

    springSecurity的位置,在过滤器中,通过代理了一个过滤器进行扩展
    在这里插入图片描述
    过滤器内部的结果
    在这里插入图片描述

    Security过滤器排序

    以下是 Spring Security Filter 排序的完整列表:

    • ForceEagerSessionCreationFilter
    • 通道处理过滤器
    • WebAsyncManagerIntegrationFilter
    • SecurityContextPersistenceFilter
    • HeaderWriterFilter
    • 过滤器
    • CsrfFilter
    • 注销过滤器
    • OAuth2AuthorizationRequestRedirectFilter
    • Saml2WebSsoAuthenticationRequestFilter
    • X509AuthenticationFilter
    • AbstractPreAuthenticatedProcessingFilter
    • CasAuthenticationFilter
    • OAuth2LoginAuthenticationFilter
    • Saml2WebSsoAuthenticationFilter
    • UsernamePasswordAuthenticationFilter
    • OpenIDAuthenticationFilter
    • DefaultLoginPageGeneratingFilter
    • DefaultLogoutPageGeneratingFilter
    • 并发会话过滤器
    • DigestAuthenticationFilter
    • BearerTokenAuthenticationFilter
    • BasicAuthenticationFilter
    • RequestCacheAwareFilter
    • SecurityContextHolderAwareRequestFilter
    • JaasApiIntegrationFilter
    • RememberMeAuthenticationFilter
    • 匿名身份验证过滤器
    • OAuth2AuthorizationCodeGrantFilter
    • 会话管理过滤器
    • ExceptionTranslationFilter
    • FilterSecurityInterceptor
    • 切换用户过滤器

    Security提供的接口

    UserDetailService接口

    自定义用户名密码查询过程,返回Security自定义的User对象

    PasswordEncoder接口

    对返回的User对象的密码加密

    LogoutHandler接口

    处理注销操作的接口

    Security的使用

    认证

    • 配置文件配置
    • 实现UserDetailService接口,自定义用户名密码

    配置文件进行配置
    在这里插入图片描述
    重写userDetailService接口,在里面可以自定义用户角色权限查询
    在这里插入图片描述
    更改配置文件,重新设置认证页面或者路径,配置需要认证的路径和不需要认证的路径
    在这里插入图片描述

    授权

    授权就是在用户认证过后,对用户对应的角色或者权限,符合对应角色或者权限的路径可以访问

    • 虽然分为用户的角色和权限,但是在用户处配置方式都是一样的,甚至角色权限混在一起的,所以权限和角色没有区别,有区别的话也就是角色的字段必须加Role_关键字

    通过用户的权限设置来授权路径访问
    在这里插入图片描述
    在这里插入图片描述
    通过设置用户的角色来授权路径访问

    在这里插入图片描述
    在这里插入图片描述
    授权异常跳转页面配置
    在这里插入图片描述

    通过注解简化授权配置

    所以security的注解必须要全局开启先

    在这里插入图片描述

    @Secured

    给@controller注解配置@Secured设置角色控制授权,注意是针对角色进行判断校验的,不是授权,授权是使用下面的两个注解

    在这里插入图片描述

    @PreAuthorize

    访问连接之前判断是否有权限

    在这里插入图片描述

    @PostAuthorize

    方法执行之后进行权限校验

    在这里插入图片描述

    @ PostFilter

    权限验证之后对数据进行过滤

    在这里插入图片描述

    @PreFilter

    对传入的数据进行过滤

    在这里插入图片描述

    Securiy其他功能

    Security登录注销

    配置注销的请求路径,和跳转页面
    在这里插入图片描述
    自定义注销handle完成自定义注销

    Security自动登录

    在这里插入图片描述

    • security自动登录已经配置好了对应的数据库操作,也就是tokenrepository,我们只需要给他配置上数据源即可
      在这里插入图片描述
    • 在配置文件中配置自动登录的相关设置
      在这里插入图片描述

    CSRF

    用户登录这个网站没有退出,登录信息仍然存在,这时候用户在一个新的页面打开其他网站,其他网站伪造好了对这个网站的put操作,但是你不知道只是点击了一下,然后就可以用这个请求成功发送数据。

    在这里插入图片描述

    解决办法:每次请求都要进行用户身份验证,这个前提是网站自身的cookie是绝对安全的,其他人无法访问。

    SpringSecurity定义多个过滤器链

    可以定义多个过滤器链完成不同路径请求的处理,适合处理登陆和后期token验证的任务
    在这里插入图片描述

    SpringCloudSecurity可以搭建Oauth2认证服务器

    在这里插入图片描述
    推荐链接

    OAuth2.0协议包含的角色

    • 资源所有者(Resource Owner):
      能够授予对受保护资源的访问权限的实体。通常是用户(user),也可以是应用程序,即该资源的拥有者。
    • 认证服务器(Authorization server):
      又称为授权服务器,认证成功后会给客户端发放令牌(),作为客户端访问资源服务器的凭据。
      服务器认证成功后向客户端颁发访问令牌(access_token),作为客户端访问资源服务器的凭据,并验证资源所有者并获得授权。
      简单点说就是登录功能,用于服务提供者对资源拥有的身份进行认证,对访问资源进行授权。
    • 资源服务器(Resource server)
      托管受保护资源的服务器,能够接受并使用访问令牌响应受保护的资源请求。
    • 第三方应用程序(Third-party application): - 示例中的浏览器、微信客户端
      又称为客户端(client),本身不存储资源,需要通过资源拥有者的授权去请求资源服务器的资源。

    四种授权模式(authorization grant):

    • Authorization code Grant:授权码模式,推荐使用
    • Implicit Grant:隐藏/简化模式,不推荐使用
    • Resource Owner Password Credentials Grant:密码模式
    • Client Credentials Grant:客户端模式
  • 相关阅读:
    openCV第三篇
    数值分析思考题(钟尔杰版)参考解答——第六章
    深度学习入门(6) - 3DV 三维视觉
    基于生物激励神经网络的室内实时激光SLAM控制方法
    JAVA项目中遇到URLEncoder URLDecoder编码解码问题
    Linux操作文件命令
    C++ 异常处理机制详解:轻松掌握异常处理技巧
    数据绑定之数据类型转换
    八股文(JVM篇)第十二天
    2.5 - 死锁
  • 原文地址:https://blog.csdn.net/qq_37771209/article/details/126886442