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