質問: 現在この投稿に設定したタグの技術を使ってWebアプリケーションの実装をしています。 質問があるのですが、 結論から言うと、 **spring bootで完了画面からブラウザバックで確認画面に戻らないようにするにはどうしたらいいでしょうか?** Postmappingで確認画面から完了画面に遷移しても、再度確認画面のURLを直叩きすると確認画面が表示されます。 それ以外の方法として思いつくものはAjaxで確認画面から同じURLで完了画面を表示する方法です。 しかし、その方法だとjsで多くの対処をしなければいけないため、できればSpirngBoot内のサーバー側の処理で対処したいです。 もしいい方法がある方がいらっしゃれば教えて頂けると助かります。お願いします。
回答: ブラウザにキャッシュして欲しくないレスポンスに対してレスポンスヘッダを明示することで「ブラウザの戻る」操作をしたときに、ブラウザは再送信をしますので、 例えば、 ``` @Controller @RequestMapping("/forms") public class FormsInputController { @PostMapping("confirm") public ModelAndView confirm(@ModelAttribute Forms form, ModelAndView mnv, RedirectAttributes redirectAttributes) { redirectAttributes.addFlashAttribute("forms", form); mnv.setViewName("redirect:confirm"); return mnv; } @GetMapping("confirm") public ModelAndView confirmView(@ModelAttribute("forms") Forms form, ModelAndView mnv, HttpServletResponse response) { response.setHeader("Cache-Control", "no-cache,no-store,must-revalidate"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); mnv.setViewName("forms/confirm"); return mnv; } } ``` とすると、完了画面から確認画面へ戻ったとき /confirm のGETでブラウザは再リクエストを行います。 このとき、Flashスコープに値がなかったときは想定外の画面遷移としてエラーとするか、再入力する画面へリダイレクトするなどの措置をControllerに追加すればよいでしょう。