2017-01-10 2 views
0

Я использую аутентификацию формы в форме jspphere, и я хочу вернуть введенное имя j_us на страницу с ошибкой.Невозможно прочитать j_username после неудачного входа в систему

Я использовал специальный фильтр для перехвата вызова в j_security_check и добавил параметр j_username к запросу в качестве атрибута, но при проверке атрибута на странице ошибки или в контроллере я обнаружил, что он всегда равен нулю. Параметр j_username был найден в фильтре перед доступом к j_security_check, проблема в том, что после неудачного входа в систему attemp.

Почему websphere при перенаправлении на URL-адрес ошибки не передает j_username и j_password и как я могу получить доступ к j_username на странице ошибки входа?

+0

Почему? Пользователь знает, что он ввел. Зачем вам рассказывать ему то, что он уже знает? – EJP

+0

Во-первых, это не ответило на вопрос. Но, если вам интересно, есть много причин, в том числе вы не можете ожидать, что клиент избежит опечаток и попросит его вспомнить, что он набрал. Или вы хотите проверить, произошел ли сбой входа в систему, поскольку имя пользователя вообще не существует в вашей базе данных и на основе этого отображается соответствующее сообщение об ошибке или перенаправление на страницу регистрации. Есть много причин, но меня больше интересует ответ, чем вопрос :) –

ответ

0

Решение было простым. Я обнаружил, что websphere 8.5 создает сеанс, когда действие равно/j_security_check. Итак, я использовал веб-фильтр для/j_security_check, чтобы сохранить параметр j_username в этом сеансе, и когда происходит сбой входа, я получил имя пользователя из этого сеанса, используя $ {sessionScope [STORED_USERNAME]}.

Надеюсь, что помощь

0

Мое предположение, что j_username отменяется, когда происходит сбой входа в систему. Вероятно, вам придется получить имя пользователя из запроса в вашем фильтре и передать его на страницу с ошибкой, используя request.getParameter («j_username»)?

Хотя я скажу с точки зрения безопасности, меньше информации для конечного пользователя лучше. Я бы не сказал конечному пользователю, что имя пользователя существует, а пароль плохой, потому что, если кто-то пытается взломать учетную запись, вы предоставили им одну часть информации, которую они не знали, которая «является ли имя пользователя действительным»? Я бы указал имя пользователя, которое они ввели, но просто сказал: «либо имя пользователя не существует, либо пароль недействителен», и оставляйте его неоднозначным. Таким образом, действительный пользователь будет знать, неверно ли они набрали свое имя пользователя, но хакер не знает, правильно ли он это сделал.

+0

. Имя j_us_nername при запуске сервера перенаправляется на страницу с ошибкой. Я соглашаюсь с тем, чтобы показать пользователю меньше информации по соображениям безопасности. Но это приложение предназначено для внутреннего использования, а не для публики. Но спасибо за информацию –

+0

Справа. Таким образом, вы должны иметь возможность вытащить имя пользователя, используя request.getParameter(), прежде чем вызывать логин, который затем позволяет сохранить его, чтобы перейти на страницу с ошибкой. –