ИМХО вы на правильном пути.
В прошлом я использовал DTO (объект передачи данных, легкий объект данных), который используется для хранения информации об исключении и хранится в сеансе. Код, который перехватывает ошибку и вызывает перенаправление на страницу ошибки, также устанавливает в DTO флаг, указывающий, можно ли исправить ошибку, и если это так, он также сохраняет URL-адрес в DTO - это означает, что страница ошибки может отобразить ссылку, по которой пользователь может щелкнуть, чтобы вернуться туда, где они были прерваны (вы контролируете ссылку и все, что находится на ее конце, так что вы можете отправить их обратно туда, куда вам нравится в вашем приложении, или воссоздать столько, сколько хотите, чтобы они продолжили).
Помните, что Cache является глобальным, поэтому возможно, что вы можете перезаписать информацию об исключениях одного пользователя другим пользователем.