SpringMVC重定向接口,参数暴露在url中解决方案!RedirectAttributes

OK,首先描述下业务场景,终端数量限制登录

1.首先访问项目login的get接口

2.输入账号密码点击登录后,会请求login的POST接口

3.后台对终端数量逻辑处理不允许登录跳回到登录页面

4.因代码原因需在后台进行多次重定向接口,最后跳转静态jsp页面

        在a接口中携带参数重定向到b接口中,b接口重定向到登录的jsp页面

        但是会发现,跳转到jsp页面后a接口携带的参数拼接到了url中,实际是因为重定向接口实际也是相当于是发送了一次请求,所以才会出现到地址栏中!

话不多说直接上原因:spring MVC框架controller间跳转,需重定向,会将modelAndView中放置的属性值,拼接到重定向url后导致。

解决方案

        a接口的接口参数中添加RedirectAttributes并且在return前ra.addFlashAttribute("key","value");这个不影响return ModelAndView!

        测试发现参数不会再暴露在url中,并且在jsp页面中可以获取到参数,并且在第一次携带参数后b接口跳转jsp页面前的接口使用@ModelAttribute可以成功接收,再次刷新页面请求b接口,发现参数获取不到,已被清除!


下面是AI对于RedirectAttributes的解释:

RedirectAttributes.addFlashAttribute的值生命周期主要涉及以下几个方面:
一、值的存储与传递

当使用RedirectAttributes.addFlashAttribute("参数","值")方法时,指定的参数和值会被存储起来,以便在重定向后的请求中访问。这个存储过程并不是简单地将参数拼接到重定向的URL上,而是利用了session来暂时保存这些数据。
二、值的生命周期

    存储阶段:在调用addFlashAttribute方法时,参数和值被添加到FlashMap中,FlashMap随后被存储到session中。
    传递阶段:当执行重定向时,Spring MVC会从session中检索出FlashMap,并将其中的参数和值添加到重定向目标请求的模型中。这样,在重定向后的请求处理中,就可以通过模型访问到这些参数了。
    移除阶段:一旦参数和值被添加到重定向目标请求的模型中,它们就会从session中的FlashMap中移除。这意味着,如果用户在重定向后的页面上刷新页面或进行其他操作,这些参数将不再可用。
    
三、注意事项

    安全性:由于addFlashAttribute方法将参数存储在session中,因此相对于将参数直接拼接到URL上(使用addAttribute方法)来说,它更加安全。因为URL上的参数可能会被恶意用户篡改或窃取。
    使用场景:addFlashAttribute方法适用于需要在重定向后传递敏感信息或需要在页面上显示一次性消息(如成功或错误消息)的场景。
    限制:由于参数和值在重定向后被从session中移除,因此它们无法在重定向后的控制器方法中直接通过@RequestParam注解获取。如果需要在控制器方法中访问这些参数,可以考虑使用其他方法(如通过模型传递或使用@ModelAttribute注解)。

综上所述,RedirectAttributes.addFlashAttribute的值生命周期包括存储、传递和移除三个阶段。在这个过程中,参数和值被安全地存储在session中,并在重定向后的请求中传递和移除。

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

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

相关文章

Spring Boot01(注解、)---java八股

Spring Boot中常用注解及其底层实现 1、SpringBootApplication注解: SpringBootApplication注解:这个注解标识了一个SpringBoot工程,它实际上是另外三个注解的组合,这三个注解是: aSpringBootConfiguration&#xff1a…

✨2.快速了解HTML5的标签类型

✨✨HTML5 的标签类型丰富多样&#xff0c;每种类型都有其独特的功能和用途&#xff0c;以下是一些常见的 HTML5 标签类型介绍&#xff1a; &#x1f98b;结构标签 &#x1faad;<html>&#xff1a;它是 HTML 文档的根标签&#xff0c;所有其他标签都包含在这个标签内&am…

eNSP防火墙综合实验

一、实验拓扑 二、ip和安全区域配置 1、防火墙ip和安全区域配置 新建两个安全区域 ip配置 Client1 Client2 电信DNS 百度web-1 联通DNS 百度web-2 R2 R1 三、DNS透明代理相关配置 1、导入运营商地址库 2、新建链路接口 3、配置真实DNS服务器 4、创建虚拟DNS服务器 5、配置D…

Linux 配置交换空间(Swap)解决内存不足

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

个人shell脚本分享

在周一到周五做增量备份&#xff0c;在周六周日做完全备份 #!/bin/bash定义变量 SRC“/path/to/source” # 源目录 BKUP“/backup” # 备份主目录 FUL“KaTeX parse error: Expected EOF, got # at position 22: …ull" #̲ 完全备份目录 INC"BKUP/inc” # 增量备份…

Django 5 实用指南(一)安装与配置

1.1 Django5的背景与发展 Django 自从2005年由Adrian Holovaty和Simon Willison在 Lawrence Journal-World 新闻网站上首次发布以来&#xff0c;Django 一直是 Web 开发领域最受欢迎的框架之一。Django 框架经历了多个版本的演进&#xff0c;每次版本更新都引入了新功能、改进了…

百度搜索融合 DeepSeek 满血版,开启智能搜索新篇

百度搜索融合 DeepSeek 满血版&#xff0c;开启智能搜索新篇 &#x1f680; &#x1f539; 一、百度搜索全量接入 DeepSeek &#x1f539; 百度搜索迎来重要升级&#xff0c;DeepSeek 满血版全面上线&#xff01;&#x1f389; 用户在百度 APP 搜索后&#xff0c;点击「AI」即…

RabbitMQ服务异步通信

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1. 消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失&#xff1a; 生…

【教程】MySQL数据库学习笔记(七)——多表操作(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…

胶囊网络动态路由算法:突破CNN空间局限性的数学原理与工程实践

一、CNN的空间局限性痛点解析 传统CNN的瓶颈&#xff1a; 池化操作导致空间信息丢失&#xff08;最大池化丢弃85%激活值&#xff09;无法建模层次空间关系&#xff08;旋转/平移等变换不敏感&#xff09;局部感受野限制全局特征整合 示例对比&#xff1a; # CNN最大池化示例…

#渗透测试#批量漏洞挖掘#Apache Log4j反序列化命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Apache Log4j反序列化命令执行漏洞 一、…

深入剖析Spring MVC

一、Spring MVC 概述 1. 什么是 Spring MVC&#xff1f; Spring MVC 是基于 Spring 框架的 Web 框架&#xff0c;它实现了 MVC 设计模式&#xff0c;将应用程序分为三个核心部分&#xff1a; Model&#xff1a;封装应用程序的数据和业务逻辑。 View&#xff1a;负责渲染数据…

机器学习入门-读书摘要

先看了《深度学习入门&#xff1a;基于python的理论和实践》这本电子书&#xff0c;早上因为入迷还坐过站了。。 因为里面的反向传播和链式法则特别难懂&#xff0c;又网上搜了相关内容进行进一步理解&#xff0c;参考的以下文章&#xff08;个人认为都讲的都非常好&#xff0…

【AI】mac 本地部署 Dify 实现智能体

下载 Ollama 访问 Ollama 下载页&#xff0c;下载对应系统 Ollama 客户端。或者参考文章【实战AI】macbook M1 本地ollama运行deepseek_m1 max可以跑deepseek吗-CSDN博客 dify 开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力&am…

[实现Rpc] 消息抽象层的具体实现

目录 具象层 _ 消息抽象的实现 信息的抽象类 实现 JsonMessage JsonRequest & JsonResponse 消息-不同消息分装实现 实现 Request RpcRequest TopicRequest ServiceRequest Response RpcResponse TopicResponse ServiceResponse 实现 生产工厂 本篇文章继 …

计算机考研之数据结构:深入解析最大公约数与欧几里得算法

一、生活中的公约数应用 在日常生活中&#xff0c;经常需要处理"均分分配"问题。例如&#xff1a;要将24块巧克力和18块饼干平均分给小朋友&#xff0c;最多能分给几个小朋友&#xff1f;这就是典型的求最大公约数问题。 二、基本概念详解 约数与公约数 约数&…

NCHAR_CS和CHAR_CS,导致UNION ALL 时,提示SQL 错误 [12704] [72000]: ORA-12704: 字符集不匹配

检查涉及的数据表和列的字符集设置 -- 查询表的字符集 SELECT parameter, value FROM nls_database_parameters WHERE parameter LIKE NLS_CHARACTERSET;-- 查询列的字符集&#xff08;对于特定表&#xff09; SELECT column_name, character_set_name FROM all_tab_columns W…

算法之 跳跃游戏

文章目录 55.跳跃游戏思路参考&#xff1a;56.合并区间 55.跳跃游戏 55.跳跃游戏 灵神思路 思路分析&#xff1a; 两种思路&#xff0c;思路1是我们可以直接维护当前到达i的时候所能到达的最右的边界mr&#xff0c;如果i>mr就说明无法到达i,否则就是可以到达&#xff1b;…

在C#中动态访问对象属性时,用表达式树可以获得高效性能

在C#中如何用表达式树动态访问对象属性的问题。用户可能已经知道反射的基本用法&#xff0c;但想用表达式树来提高性能&#xff0c;因为表达式树编译后的委托执行速度比反射快。 首先&#xff0c;表达式树的基本概念。表达式树允许在运行时构建代码&#xff0c;并编译成可执行的…

深入解析 Flutter 性能优化:从原理到实践

深入解析 Flutter 性能优化&#xff1a;从原理到实践的全面指南 Flutter 是一个高性能的跨平台框架&#xff0c;但在开发复杂应用时&#xff0c;性能问题仍然可能出现。性能优化是开发高质量 Flutter 应用的关键。本篇博客将从 Flutter 的渲染原理出发&#xff0c;结合实际场景…