Трудно ответить на вопрос, потому что я вижу некоторую непоследовательность в ваших объяснениях или они неполны. Однако я рискну угадать истину и дам ответ.
Процесс входа по умолчанию хорошо описан в https://stackoverflow.com/a/9530082. Вы открываете веб-страницу, сервер отображает форму входа. Когда вы отправляете пароль, сервер открывает страницу. Вот почему кнопка «Назад» работает: вы дважды зашли на одну и ту же страницу, но в первый раз отобразилась форма входа. Когда вы нажимаете «Назад» после входа в систему, вы возвращаетесь на ту же страницу (тот же URL-адрес).
Вы написали: "Даже если (...) URL-адрес страницы входа вводится вручную, пользователю показывается главная страница." Это невозможно, если только вы не сделали собственный код, который, если пользователь уже регистрируется, затем отображается главная страница. По умолчанию спецификация сервлета не блокирует отображение страницы входа для уже зарегистрированных.
Поэтому, если у вас есть защита от display-login-form-for-logged
, просто примените ее против display-signup-form-for-logged
.
Самое простое решение, которое я проверил, — это сервлет перед формой регистрации. Если пользователь не зарегистрирован, перейдите в JSP с формой регистрации. Если пользователь вошел в систему, перенаправить на главную страницу. Важно добавить resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
, иначе сервлет по кнопке «Назад» не будет вызываться, а браузер будет отображать кешированную форму.
Если вы все еще заинтересованы, дайте мне знать, и я поделюсь примером github. Но я думаю, что моего объяснения достаточно, чтобы понять и победить вашу проблему. (Мой пример довольно не идеален, потому что простая аутентификация сервлета сложна, и я привык к безопасности Spring)
person
michaldo
schedule
01.04.2015
getServletContext().getRequestDispatcher("/pages/Admin.jsp").forward(request, response);
Когда я нажимаю кнопку «Назад» в браузере, она просто показывает страницу входа в систему, в то время как она всегда перенаправляет на главную страницу, когда пользователь входит в систему. - person CodeGust   schedule 30.03.2015