springSecurity学习之springSecurity流程

springSecurity流程

认证流程

  • 登录请求进入UsernamePasswordAuthenticationFilter,父类是AbstractAuthenticationProcessingFilter,执行AbstractAuthenticationProcessingFilter的doFilter方法

    authResult = attemptAuthentication(request, response);
    
  • 确认该请求是否需要认证,如果需要认证且此时还没有进行认证,则尝试进行认证,调用UsernamePasswordAuthenticationFilter的attemptAuthentication方法,将从请求中获取的用户名和密码封装成UsernamePasswordAuthenticationToken对象(认证状态为未认证)

    UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, password);public UsernamePasswordAuthenticationToken(Object principal, Object credentials) {super(null);this.principal = principal;this.credentials = credentials;// 设置为未认证setAuthenticated(false);}
    
  • 通过AuthenticationManager(实现类是ProviderManager)委托AuthenticationProvider(实现类是DaoAuthenticationProvider)关联UserDetailsService进行认证过程

    // UsernamePasswordAuthenticationFilter中通过AuthenticationManager进行认证
    return this.getAuthenticationManager().authenticate(authRequest);// ProviderManager中通过AuthenticationProvider进行认证,使用的是DaoAuthenticationProvider对象,DaoAuthenticationProvider继承了AbstractUserDetailsAuthenticationProvider类,实际走的是AbstractUserDetailsAuthenticationProvider的authenticate方法
    result = provider.authenticate(authentication);// AbstractUserDetailsAuthenticationProvider的authenticate方法中检索用户,实际执行的是DaoAuthenticationProvider的retrieveUser方法
    user = retrieveUser(username,(UsernamePasswordAuthenticationToken) authentication);
    // DaoAuthenticationProvider的retrieveUser方法中通过UserDetailsService就查询用户进行认证,可以自己实现用户查找以及认证过程
    loadedUser = this.getUserDetailsService().loadUserByUsername(username);
    
  • UserDetailsService返回的UserDetails被封装成Authentication

  • 如果认证成功则执行successfulAuthentication

    successfulAuthentication(request, response, chain, authResult);
    
  • 如果认证失败则执行unsuccessfulAuthentication

    unsuccessfulAuthentication(request, response, failed);
    

权限流程

FilterSecurityInterceptor

  • 判断请求是否有权限

    InterceptorStatusToken token = super.beforeInvocation(fi);
    
  • 进行springmvc处理

    fi.getChain().doFilter(fi.getRequest(), fi.getResponse());
    

https://zhhll.icu/2021/框架/springSecurity/3.springSecurity流程/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springcloud-远程调用超时问题

1、报错信息: 09:06:34.992 [PollingServerListUpdater-0] INFO c.n.config.ChainedDynamicProperty - Flipping property: device-managmet.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnection…

PYTHON学习笔记(四、pyhton数据结构--列表)

(1)list列表 列表的含义是指:(1)一系列的按特定顺序排列的元素组成。(2)python中内置的可变序列。(3)在python中使用[]定义列表,元素与元素之间使用英文的逗…

含有罗马字母的txt转换为csv文件读取-报错

r语言绘图二&#xff08;输入复杂的数学符号&#xff0d;&#xff0d;希腊字母表&#xff09; - R语言论坛 - 经管之家(原人大经济论坛) (pinggu.org) CSV读取报错 gcmeta <- read.csv("metadata.csv") > head(gcmeta)Sample Patient Tissue Platform Subty…

CentOS(7.x、8)上安装EMQX

EMQX 是一个高度可扩展的分布式 MQTT 消息服务器&#xff0c;适用于 IoT、M2M 和移动应用程序。以下是在 CentOS 系统上安装 EMQX 的基本步骤&#xff1a; 在 CentOS 上安装 EMQ X 步骤 1: 添加 EMQ X YUM 源 首先&#xff0c;你需要添加 EMQ X 的官方 YUM 源到你的 CentOS 系…

NNOM训练环境搭建(Windows)

目录 一、安装Anaconda 二、安装nnom编译环境 1. 创建并激活虚拟环境 2. 统一安装所有安装包 三、编译NNOM 一、安装Anaconda windows版本&#xff1a;Anaconda3-2019.10-Windows-x86_64.exe 勾选添加进系统环境变量&#xff0c;其他使用默认选项进行安装。 二、安装nnom…

Dubbo 的服务降级

在分布式系统中&#xff0c;服务的高可用性是至关重要的。然而&#xff0c;由于网络故障、服务器宕机等原因&#xff0c;服务不可用的情况时有发生。为了确保系统的稳定性和用户体验&#xff0c;Apache Dubbo 提供了服务降级功能。服务降级可以在远程服务不可用时&#xff0c;自…

pycharm报错:No module named pip/No module named pytest

1、问题概述? 今天在执行一个python脚本的时候,控制台提示:No module named pytest,就是没有pytest模块,于是我使用pip命令进行安装,命令如下; pip install pytest 结果又提示No module named pip,说我没有pip模块,没办法,再安装pip 2、安装pip-方式1 在pycharm的T…

【python基础知识】整除

熟练使用你所常用的开发语言是一个非常基本的要求。如果你日常需要使用Python&#xff0c;但是你对向上取整&#xff0c;向下取整&#xff0c;以及Python中的默认实现方式是什么都不知道的话&#xff0c;那么我就需要怀疑你的专业能力了。 1. 整除 讲解这个整除的知识&#xf…

因果推断 | 双重机器学习(DML)算法原理和实例应用

文章目录 1 引言2 DML算法原理2.1 问题阐述2.2 DML算法 3 DML代码实现3.1 策略变量为0/1变量3.2 策略变量为连续变量 4 总结5 相关阅读 1 引言 小伙伴们&#xff0c;好久不见呀。 距离上次更新已经过去了一个半月&#xff0c;上次发文章时还信誓旦旦地表达自己后续目标是3周更…

C#中的Func

1.Func委托的定义和使用步骤 Func委托在C#中用于表示一个具有指定参数和返回类型的方法。‌Func委托的定义允许你指定参数的类型和返回值的类型&#xff0c;‌它可以有多达16个参数。‌第一个泛型参数表示方法的参数类型&#xff0c;‌最后一个泛型参数表示方法的返回类型。‌…

VINS介绍

VINS&#xff08;Visual-Inertial Navigation System&#xff09;是一个视觉惯性导航系统&#xff0c;通常用于机器人、无人机或任何需要在未知环境中自主导航的移动平台。VINS结合了视觉传感器&#xff08;通常是相机&#xff09;和惯性测量单元&#xff08;IMU&#xff09;的…

【BUG】已解决:AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘

AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘ 目录 AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘ 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

Elasticsearch数据迁移

前言 近期在搞ES集群的迁移&#xff0c;以及日常ES运维中也涉及到同集群内索引的重命名、迁移等实际场景。就考虑把实际场景模拟一下&#xff0c;侧重不同集群间的数据迁移&#xff0c;对比观察一下目前主流的数据迁移方式的优点和缺点。为之后真实迁移场景提供参考。 这次对…

Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)

基础介绍 Netfilter是Linux操作系统核心层内部的一个数据包处理模块&#xff0c;它具有如下功能&#xff1a;网络地址转换(Network Address Translate)数据包内容修改以及数据包过滤的防火墙功能。Netfliter框架不仅仅在ipv4中有应用&#xff0c;bridge&#xff0c;ipv4&#…

ipv6 基础学习(一)

IPv6 为什么要有IPV6&#xff1f; IPv4地址空间有限&#xff1a;IPv4使用32位地址&#xff0c;最多可提供约43亿个地址。随着互联网设备数量的爆炸式增长&#xff0c;这些地址已经几乎耗尽。 IPv6地址空间庞大&#xff1a;IPv6使用128位地址&#xff0c;可以提供大约3.410^3…

面试题:Java中堆内存和栈内存的区别,缓存数据是把数据放到哪里

目录 堆内存&#xff08;Heap&#xff09;栈内存&#xff08;Stack&#xff09;String字符串的hashcode缓存 在Java中&#xff0c;堆内存&#xff08;Heap&#xff09;和栈内存&#xff08;Stack&#xff09;是两种不同类型的内存区域。它们各自扮演着不同的角色&#xff0c;并…

深入理解TCP/IP协议中的三次握手

&#x1f44d; 个人网站&#xff1a;【洛秋资源小站】 深入理解TCP/IP协议中的三次握手 在计算机网络中&#xff0c;TCP/IP协议是通信的基石。理解TCP/IP协议中的三次握手是掌握网络通信的关键步骤之一。本文将详细解释TCP/IP协议中的三次握手过程&#xff0c;探讨其工作原理&…

Python面试整理-字符串处理

在Python中,字符串是一种非常重要且常用的数据类型,用于处理文本。字符串操作包括许多不同的方法,可以用来查询、修改、和处理字符串。以下是一些常用的字符串处理技术: 创建字符串 字符串可以通过单引号、双引号或三引号创建,支持多行字符串。 s1 = Hello s2 = "Wor…

操作系统安全:Windows隐藏账户的安全问题与实战操作。

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 Windows系统的…

2024-7-21 IT领域最新资讯概览

目录 微软蓝屏事件及后续影响 网络安全公司CrowdStrike的声明与股价波动 全球IT支出增长趋势 微软蓝屏事件及后续影响 事件概述&#xff1a; 由于网络安全公司CrowdStrike的技术更新中的“bug”&#xff0c;导致微软部分应用和服务出现蓝屏死机问题&#xff0c;进而引发了全…