当前位置: 首页 > news >正文

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中,并在重定向后的请求中传递和移除。

相关文章:

  • 2025年人工智能十大趋势:AI如何塑造未来?
  • asp.net core mvc 富文本编辑的实现
  • matlab 汽车abs的模糊pid和pid控制仿真
  • 美国股市主要指数介绍(Major U.S. Stock Market Indexes):三大股指(中英双语)
  • ubuntu安装docker 无法拉取问题
  • Android13-包安装器PackageInstaller-之apk安装流程
  • std::ranges::contains
  • 数仓搭建:DWB层(基础数据层)
  • Ubuntu 下 systemd 介绍
  • 应用案例 | uaGate SI助力汽车零部件工厂将生产数据传输到MES
  • 进阶——第十六届蓝桥杯嵌入式熟练度练习(开发板捕获频率和占空比)
  • 【云原生】最新版Kubernetes集群基于Containerd部署
  • VMware 17 安装 VMTools(win 7旗舰 X64)
  • 使用redis分布式锁来解决高并发场景
  • MySQL中的事务隔离级别有哪些?
  • 基于STM32、HAL库、FM24CL64(I2C接口)驱动程序设计
  • 达梦数据库针对慢SQL,收集统计信息清除执行计划缓存
  • VScode内接入deepseek包过程(本地部署版包会)
  • 【网络编程】之数据链路层
  • 使用卷积神经网络(CNN)对颜色失真情况下进行数字识别
  • 数据库网站建设多少钱/网站关键词搜索排名优化
  • 外综服务平台哪里做网站/企业seo关键词优化
  • 局域网站建设/今天今日头条新闻
  • 积分商城网站开发/域名收录