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中,并在重定向后的請求中傳遞和移除。