Ответ 1
Использование метода HttpServletRequest#login()
указывает, что вы используете Servlet 3.0, который является частью Java EE 6. Но вы чтение 7-летнего учебника J2EE 1.4. Я бы предложил отложить этот пыльный учебник и прочитать Java EE 6 tutorial. Безопасность, управляемая контейнером, начинается здесь.
Вернемся к вашей конкретной проблеме, login()
будет (как задокументировано) генерирует исключение, если логин недействителен или когда контейнер не работает У какого-либо Райма не было определенности. Предполагая, что вы уверены, что имя пользователя/пароль действительны, вероятно, это последняя причина. Как это сделать в точности зависит от рассматриваемого servletcontainer. Просто ознакомьтесь со своей документацией, используя ключевое слово "Царство". Например, для Tomcat 7.0, что Realm Configuration HOW-TO. Если у вас есть имена пользователей/паролей в базе данных SQL, вы, вероятно, захотите использовать JDBCRealm.
Как только вы настроите Realm на уровне servletcontainer, вы сможете использовать метод login()
так, как хотите. Не забудьте добавить <security-constraint>
в web.xml
в соответствии с учебным пособием Java EE 6, чтобы ограничить доступ к определенным шаблонам URL и указать URL-адрес страницы входа.