Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SavedRequestAwareAuthenticationSuccessHandler源码分析

SavedRequestAwareAuthenticationSuccessHandler源码分析

作者头像
jack.yang
发布于 2025-04-05 14:06:58
发布于 2025-04-05 14:06:58
5200
代码可运行
举报
运行总次数:0
代码可运行

源码分析

这个SavedRequestAwareAuthenticationSuccessHandler类是一个自定义的认证成功处理器,它继承自Spring Security的SimpleUrlAuthenticationSuccessHandler。这个类的主要功能是在用户认证成功后,尝试从请求缓存中获取用户最初尝试访问的URL(即被保护的资源),然后将用户重定向到该URL,而不是默认的成功页面。

以下是对这个类的详细讲解:

  1. 成员变量:
    • logger:用于记录日志的Log对象,方便在代码中打印日志信息。
    • requestCache:一个RequestCache对象,用于在认证过程中保存和获取用户最初尝试访问的URL。这里默认使用HttpSessionRequestCache,它使用HTTP会话来存储请求。
  2. onAuthenticationSuccess方法:
    • 当用户认证成功时,该方法会被调用。
    • 首先,从requestCache中尝试获取用户最初尝试访问的SavedRequest对象。
    • 如果savedRequestnull(即没有保存任何请求),则调用父类SimpleUrlAuthenticationSuccessHandleronAuthenticationSuccess方法,通常这会将用户重定向到默认的成功页面。
    • 如果savedRequest不为null,则进一步检查是否应该使用默认的目标URL。这通过检查两个条件来实现:
      • isAlwaysUseDefaultTargetUrl()方法返回true(即始终使用默认的目标URL)。
      • 存在一个目标URL参数(通过getTargetUrlParameter()方法获取),并且该参数在请求中存在且有值。
    • 如果上述任一条件为真,则从requestCache中移除保存的请求,并调用父类的onAuthenticationSuccess方法。
    • 如果上述条件都不满足,则清除与认证相关的请求属性(通过clearAuthenticationAttributes方法),并使用savedRequest中的重定向URL(通过getRedirectUrl方法获取)将用户重定向到最初尝试访问的页面。这通过getRedirectStrategy().sendRedirect方法实现。
  3. setRequestCache方法:
    • 这是一个setter方法,用于设置requestCache对象。这使得外部可以注入自定义的RequestCache实现,以满足特定的需求。

这个类的主要用途是提升用户体验,因为它允许用户在认证成功后直接访问他们最初尝试访问的资源,而不是总是被重定向到默认的成功页面。这在用户需要访问多个受保护的资源时特别有用,因为他们不需要在每次认证后都重新导航到他们想要的页面。

源码内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * An authentication success strategy which can make use of the
 * {@link org.springframework.security.web.savedrequest.DefaultSavedRequest} which may
 * have been stored in the session by the {@link ExceptionTranslationFilter}. When such a
 * request is intercepted and requires authentication, the request data is stored to
 * record the original destination before the authentication process commenced, and to
 * allow the request to be reconstructed when a redirect to the same URL occurs. This
 * class is responsible for performing the redirect to the original URL if appropriate.
 * <p>
 * Following a successful authentication, it decides on the redirect destination, based on
 * the following scenarios:
 * <ul>
 * <li>If the {@code alwaysUseDefaultTargetUrl} property is set to true, the
 * {@code defaultTargetUrl} will be used for the destination. Any
 * {@code DefaultSavedRequest} stored in the session will be removed.</li>
 * <li>If the {@code targetUrlParameter} has been set on the request, the value will be
 * used as the destination. Any {@code DefaultSavedRequest} will again be removed.</li>
 * <li>If a {@link org.springframework.security.web.savedrequest.SavedRequest} is found in
 * the {@code RequestCache} (as set by the {@link ExceptionTranslationFilter} to record
 * the original destination before the authentication process commenced), a redirect will
 * be performed to the Url of that original destination. The {@code SavedRequest} object
 * will remain cached and be picked up when the redirected request is received (See
 * <a href="
 * {@docRoot}/org/springframework/security/web/savedrequest/SavedRequestAwareWrapper.html">SavedRequestAwareWrapper</a>).
 * </li>
 * <li>If no {@link org.springframework.security.web.savedrequest.SavedRequest} is found,
 * it will delegate to the base class.</li>
 * </ul>
 *
 * @author Luke Taylor
 * @since 3.0
 */
public class SavedRequestAwareAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {

    protected final Log logger = LogFactory.getLog(this.getClass());

    private RequestCache requestCache = new HttpSessionRequestCache();

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
          Authentication authentication) throws ServletException, IOException {
       SavedRequest savedRequest = this.requestCache.getRequest(request, response);
       if (savedRequest == null) {
          super.onAuthenticationSuccess(request, response, authentication);
          return;
       }
       String targetUrlParameter = getTargetUrlParameter();
       if (isAlwaysUseDefaultTargetUrl()
             || (targetUrlParameter != null && StringUtils.hasText(request.getParameter(targetUrlParameter)))) {
          this.requestCache.removeRequest(request, response);
          super.onAuthenticationSuccess(request, response, authentication);
          return;
       }
       clearAuthenticationAttributes(request);
       // Use the DefaultSavedRequest URL
       String targetUrl = savedRequest.getRedirectUrl();
       getRedirectStrategy().sendRedirect(request, response, targetUrl);
    }

    public void setRequestCache(RequestCache requestCache) {
       this.requestCache = requestCache;
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
分布式机器学习中的拜占庭问题
机器之心分析师网络 作者:仵冀颖 编辑:H4O 本文重点探讨分布式学习框架中针对随机梯度下降(SGD)算法的拜占庭问题。 分布式学习(Distributed Learning)是一种广泛应用的大规模模型训练框架。在分布式学习框架中,服务器通过聚合在分布式设备中训练的本地模型(local model)来利用各个设备的计算能力。分布式机器学习的典型架构——参数服务器架构中,包括一个服务器(称为参数服务器 - Parameter Server,PS)和多个计算节点(workers,也称为节点 nodes)[1]
机器之心
2023/03/29
8270
分布式机器学习中的拜占庭问题
动物与人类存在的「关键学习期」,联邦学习也有
关于关键学习期问题,我们之前撰写过这样一篇文章深度学习中的关键学习期(Critical learning periods)。生物学领域的研究人员已经确定,人类或动物存在关键期的原因是对神经元可塑性窗口的生物化学调控(the biochemical modulation of windows of neuronal plasticity)[1]。从生物学角度来看,关键期(critical periods)是指出生后早期发育的时间窗口,在这期间,感知缺陷可能导致永久性的技能损伤。生物学领域的研究人员已经发现并记录了影响一系列物种和系统的关键期,包括小猫的视力、鸟类的歌曲学习等等。对于人类来说,在视觉发育的关键时期,未被矫正的眼睛缺陷(如斜视、白内障)会导致 1/50 的成人弱视。
机器之心
2023/09/08
4200
动物与人类存在的「关键学习期」,联邦学习也有
联邦学习最新研究趋势!
联邦学习无疑是近期 AI 界最火爆的技术范式之一,在过去的2019年,涌现了大量联邦学习相关研究。
AI科技评论
2020/03/16
1.9K0
联邦学习最新研究趋势!
联邦学习下的数据逆向攻击 -- GradInversion
这一次给大家介绍一个攻击,是NVIDIA的一个工作,最近被CVPR2021所收取。
Mezereon
2021/05/17
1.6K0
联邦学习下的数据逆向攻击 -- GradInversion
联邦迁移学习最新进展:计算和传输如何“限制”模型性能?
人工智能系统需要依赖大量数据,然而数据的流转过程以及人工智能模型本身都有可能泄漏敏感隐私数据。
AI科技评论
2021/08/24
9560
联邦迁移学习最新进展:计算和传输如何“限制”模型性能?
7篇ICLR论文,遍览联邦学习最新研究进展
2020 年的 ICLR 会议原计划于4 月 26 日至 4 月 30 日在埃塞俄比亚首都亚的斯亚贝巴举行,这本是首次在非洲举办的顶级人工智能国际会议,但受到疫情影响,ICLR 2020 被迫取消线下会议改为线上虚拟会议。今年的 ICLR 论文接受情况如下:共计接收 679 片文章,其中:poster-paper 共 523 篇、Spotlight-paper(焦点论文)共 107 篇、演讲 Talk 共 48 篇,另有被拒论文(reject-paper)共计 1907 篇,接受率为 26.48%。
机器之心
2020/05/05
1.1K0
一文概述联邦持续学习最新研究进展
由于数据隐私限制,多个中心之间的数据共享受到限制,这就影响了联邦学习架构下多中心合作开发高性能深度学习模型的效果。持续学习(Continual Learning)作为点对点联合学习的一种方法,可以通过共享中间模型而不是训练数据来绕过数据隐私的限制,从而促进多中心协作开发深度学习算法。近期不断有研究人员探索联邦持续学习方法(Federated Continual Learning,FCL),即,研究持续学习在联邦学习架构下多中心协作的可行性。
机器之心
2023/08/07
1.5K0
一文概述联邦持续学习最新研究进展
ICLR 2024 | 联邦学习后门攻击的模型关键层
联邦学习使多个参与方可以在数据隐私得到保护的情况下训练机器学习模型。但是由于服务器无法监控参与者在本地进行的训练过程,参与者可以篡改本地训练模型,从而对联邦学习的全局模型构成安全序隐患,如后门攻击。
机器之心
2024/04/12
4660
ICLR 2024 | 联邦学习后门攻击的模型关键层
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?
近年来,深度学习(Deep Learning,DL)技术取得了突飞猛进的发展,在一些人工智能任务(如图像分类、语音识别等)中取得了突破。互联网巨头,如谷歌、Facebook 和亚马逊,都在提供由 DL 驱动的服务和产品方面进行了大量投资[1]。然而,高度非线性、非凸函数建模的深度神经网络(Deep neural networks,DNNs)本质上非常容易受到对抗性输入(Adversarial inputs)的影响。对抗性输入是由对手(攻击者)设计的恶意样本,目的是触发 DNNs 的不当行为。
机器之心
2022/01/20
9340
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?
笔记︱联邦学习与隐私计算的案例集锦(一)
Federated Learning - 联邦学习 参考文献: 小白也能通俗易懂的联邦学习! 关于联邦学习建模过程中算法交互内容的研究
悟乙己
2022/06/06
4.1K1
笔记︱联邦学习与隐私计算的案例集锦(一)
面向联邦学习的模型测试和调优怎么整?这篇三万字长文给你答案
机器之心分析师网络 作者:仵冀颖 编辑:H4O 本文重点讨论了面向联邦学习的模型测试和调优。研究者首先回顾了传统机器学习与一般软件测试、调优的区别和联系,然后具体分析了在实际场景中应用联邦学习存在的主要问题,包括神经架构设计、模型选择、超参数优化和调试等等。接着结合几篇最新的研究论文全面了解面向联邦学习的评价和测试,既包括了针对具体应用场景的测试(人类活动识别),也包括了对一般联邦学习算法的测试。最后集中介绍 CMU 研究小组关于联邦学习超参数调优的研究成果。 作为联邦学习系列中的重要内容,本文重点关注面向
机器之心
2023/03/29
9380
面向联邦学习的模型测试和调优怎么整?这篇三万字长文给你答案
模型被投毒攻击,如今有了新的安全手段,还被AI顶刊接收
现今,机器学习(ML),更具体地说,深度学习已经改变了从金融到医疗等广泛的行业。在当前的 ML 范式中,训练数据首先被收集和策划,然后通过最小化训练数据上的某些损失标准来优化 ML 模型。学习环境中的一个共同基本假设是训练数据可以立即访问或轻松地跨计算节点分发,即数据是「集中式」的。
机器之心
2024/04/19
2250
模型被投毒攻击,如今有了新的安全手段,还被AI顶刊接收
面向代码语言模型的安全性研究全新进展,南大&NTU联合发布全面综述
近年来,代码语言模型(Language Models for Code,简称 CodeLMs)逐渐成为推动智能化软件开发的关键技术,应用场景涵盖智能代码生成与补全、漏洞检测与修复等。例如,基于知名代码语言模型 Codex 构建的 AI 编码助手 GitHub Copilot 能够实时提供代码建议和补全,显著提升了开发者的工作效率,现已吸引超过 100 万开发者使用。然而,随着 CodeLMs 的广泛应用,各种安全问题也逐渐显现,与自然语言模型类似,CodeLMs 同样会面临后门攻击和对抗攻击等安全威胁,安全性正受到严峻挑战。例如,受攻击的 CodeLMs 可能会生成具有隐藏安全漏洞的代码,一旦这些不安全代码被集成到开发者的软件系统(如股票交易系统和自动驾驶系统)中,可能导致严重的财产损失甚至危及生命的事故。鉴于 CodeLMs 对智能化软件开发和智能软件系统的深远影响,保障其安全性至关重要。CodeLMs 安全性正成为软件工程、人工智能和网络安全领域的研究新热潮。
机器之心
2025/02/14
1530
面向代码语言模型的安全性研究全新进展,南大&NTU联合发布全面综述
区块链与联邦学习的研究
2008年10月,化名为“中本聪”的学者在密码学论坛上公开了《比特币:一种点对点的电子现金系统》一文[1],提出了利用PoW和时间戳机制构造交易区块的链式结构,剔除了可信第三方,实现了去中心化的匿名支付。比特币于2009年1月上线并发布创世块,标志着首个基于区块链技术应用的诞生。2010—2015年,比特币逐渐进入大众视野。2016—2018年,随着各国陆续对比特币进行公开表态以及世界主流经济的不确定性增强,比特币的受关注程度激增,需求量迅速扩大。事实上,比特币是区块链技术最成功的应用场景之一。2015年12月,英国政府发布了《分布式账本技术:超越区块链》[2],预测区块链将引起新一轮技术变革,建议加快区块链理论推广与应用开发进程。我国工信部于2016年10月发布了《中国区块链技术与应用发展白皮书(2016)》[3]。国务院在《“十三五”国家信息化规划》中将区块链列入战略性前沿科技之一。同年,世界经济论坛也对区块链在金融场景下的应用进行预测分析,认为区块链将在跨境支付、保险、贷款等多方面重塑金融市场基础设施。
全栈程序员站长
2022/10/04
1.7K0
区块链与联邦学习的研究
隐私计算中的联邦学习
数据资产已经成为产品和服务设计的关键工具,但是集中采集用户数据会使个人隐私面临风险,进而使组织面临法律风险。从2016年开始,人们开始探索如何在用户隐私保护下使用数据的所有权和来源,这使得联邦学习和联邦分析成为关注的热点。随着研究范围的不断扩大,联邦学习已经开始应用到物联网等更广泛的领域。
半吊子全栈工匠
2022/12/03
1.2K0
隐私计算中的联邦学习
联邦学习 OR 迁移学习?No,我们需要联邦迁移学习
海量训练数据是现代机器学习算法、人工智能技术在各个领域中应用获得成功的重要条件。例如,计算机视觉和电子商务推荐系统中的 AI 算法都依赖于大规模的标记良好的数据集才能获得较好的处理效果,如 ImageNet 等。然而在一些应用领域中,例如医学领域、经济学领域以及一些政务信息化领域中,海量的可用训练数据往往是非常有限的。存在这些问题的主要原因:一是,针对机器学习算法的数据标注任务需要专业的知识和经验才能完成,这种预处理任务的成本非常高,往往无法获得机器学习所需要的足够的标注数据。二是,各个行业对数据隐私和数据安全的保护越来越强,在一定程度上也限制了对训练数据的共享,也就进一步加剧了可用的标注数据缺乏的问题。
机器之心
2020/11/20
1.1K0
联邦学习 OR 迁移学习?No,我们需要联邦迁移学习
在推荐系统中,我还有隐私吗?联邦学习:你可以有
随着互联网覆盖范围的扩大,越来越多的用户习惯于在网上消费各种形式的内容,推荐系统应运而生。推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。以网络新闻为例,由于每天都有大量的新闻文章发布在网上,在线新闻服务的用户面临着严重的信息过载。不同的用户通常喜欢不同的新闻信息。因此,个性化新闻推荐技术被广泛应用于用户的个性化新闻展示和服务中。关于新闻的推荐算法 / 模型研究已经引起了学术界和产业界的广泛关注。
机器之心
2020/12/03
5.5K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
2.5亿美元资助500个项目,美国国家科学基金会CAREER奖深度解读
机器之心分析师网络 作者:Jiying 编辑:H4O 本文对 NSF CISE CAREER 2022 年公开资助的一项与联邦学习相关的项目进行了分析,结合 PI 的相关研究背景,了解美国青年研究学者在该方面开展的研究工作。 美国国家科学基金会(National Science Foundation,NSF)是美国独立的联邦机构,由美国国会于 1950 年创建。NSF 的任务是通过对基础科学研究计划的资助,改进科学教育,发展科学信息和增进国际科学合作等办法促进美国科学的发展。NSF 包括以下七个方向:生物科
机器之心
2022/09/26
1.1K0
2.5亿美元资助500个项目,美国国家科学基金会CAREER奖深度解读
Hinton团队胶囊网络新进展:两种方法加持,精准检测和防御对抗性攻击
在本文中,我们提出了一种基于胶囊层(Capsule layer,Sabour et al., 2017; Qin et al., 2020)的网络和检测机制,它可以精确地检测到攻击,对于未检测到的攻击,它通常也可以迫使攻击者生成类似于目标类的图像(从而使它们被偏转)。我们的网络结构由两部分组成:对输入进行分类的胶囊分类网络,以及根据预测的胶囊(predicted capsule)的姿态参数(pose parameters)重建输入图像的重建网络。
机器之心
2020/04/02
7510
分布式学习和联邦学习简介​
来源:DeepHub IMBA本文约2200字,建议阅读5分钟本文讨论分布式学习和联邦学习的主要原理以及它们是如何工作的。 在这篇文章中,我们将讨论分布式学习和联邦学习的主要原理以及它们是如何工作的。首先,我们从一个简单的单机示例开始,然后将其发展为分布式随机梯度下降(D-SGD),最后是联邦学习(FL)。 集中学习(单机) 一个最简单的例子,我们想学习人的身高和体重之间的线性关系,并且我们拥有100人的体重和身高数据,想训练一种线性模型,该模型使用身高预测人们的体重,线性回归W = [a,b]如下:
数据派THU
2022/08/29
8750
分布式学习和联邦学习简介​
推荐阅读
相关推荐
分布式机器学习中的拜占庭问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验