2011-01-21 4 views
2

Я пытаюсь реализовать аутентификацию на основе форм с помощью Tomcat. Все мои защищенные сервлеты отображаются в mydomain/myapp. Я могу защитить этот каталог, следуя основным учебным пособиям и указав страницы входа и входа в систему.Проверка подлинности формы с помощью Tomcat

Моя проблема в том, что я хочу незащищенный mydomain/index.html, который содержит формы имени пользователя/пароля, чтобы посетитель мог войти в систему оттуда. Моя лучшая попытка пока не работает:

<form method="POST" action="myapp/"> 
    Username: <input type="text" name="j_username"> <br/> 
    Password: <input type="password" name="j_password"> 
    <input type="submit" value="Login"> 
</form> 

Любые предложения?

Редактировать: Аутентификация работает в том смысле, что если вы попытаетесь получить доступ к mydomain/myapp, вы получите перенаправление на страницу входа. Я не понимаю, как разрешить пользователю входить в систему без предварительной попытки доступа к защищенным страницам.

+0

Что это значит, когда вы говорите, что это не работает? – Raghuram

ответ

1

Прочитать пункт 13.5.3.1 документа servlet specicification. В нем написано: «Для того, чтобы аутентификация прошла надлежащим образом, действие формы входа должно всегда быть j_security_check».

Таким образом, вы должны изменить действие своей формы входа. Это должно быть j_security_check.

+0

Когда пользователь пытается получить доступ к mydomain/myapp, они перенаправляются на страницу входа, с формой j_security_check, и все работает нормально. Но как мне поместить форму входа в mydomain/index.html, чтобы они могли быть аутентифицированы и перенаправлены на защищенную часть? – user583933

0

Когда пользователь пытается получить доступ к защищенному ресурсу (protectedPage.jsp), они будут отправлены на вашу страницу входа (login.jsp, например). Они будут вводить имя пользователя и пароль, затем нажмите «Отправить». Форма будет отправлена ​​с использованием действия j_security_check. Это то, что предоставляет контейнер. Поэтому, если логин будет успешным, пользователь будет перенаправлен на securePage.jsp, иначе он будет перенаправлен на страницу с ошибкой, что у вас также есть

0

в web.xml, где вы объявляете о безопасности, вы должны объявить его для обоих , защищенный ресурс и открытый ресурс.

только при объявлении открытого ресурса вы не пишите 'AUT-constaint' тегов

, например, обеспеченные ресурсы:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>restricted</web-resource-name> 
     <url-pattern>/*</url-pattern>   
    </web-resource-collection> 

    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
</security-constraint> 

и для открытого ресурса:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>open</web-resource-name> 
     <url-pattern>/path/to/open/resource</url-pattern>   
    </web-resource-collection> 
</security-constraint> 
Смежные вопросы