ブラウザにキャッシュして欲しくないレスポンスに対してレスポンスヘッダを明示することで「ブラウザの戻る」操作をしたときに、ブラウザは再送信をしますので、
例えば、
java
1@Controller
2@RequestMapping("/forms")
3public class FormsInputController {
4 @PostMapping("confirm")
5 public ModelAndView confirm(@ModelAttribute Forms form, ModelAndView mnv, RedirectAttributes redirectAttributes) {
6 redirectAttributes.addFlashAttribute("forms", form);
7 mnv.setViewName("redirect:confirm");
8 return mnv;
9 }
10
11 @GetMapping("confirm")
12 public ModelAndView confirmView(@ModelAttribute("forms") Forms form, ModelAndView mnv,
13 HttpServletResponse response) {
14 response.setHeader("Cache-Control", "no-cache,no-store,must-revalidate");
15 response.setHeader("Pragma", "no-cache");
16 response.setDateHeader("Expires", 0);
17 mnv.setViewName("forms/confirm");
18 return mnv;
19 }
20}
とすると、完了画面から確認画面へ戻ったとき /confirm のGETでブラウザは再リクエストを行います。
このとき、Flashスコープに値がなかったときは想定外の画面遷移としてエラーとするか、再入力する画面へリダイレクトするなどの措置をControllerに追加すればよいでしょう。