Проверка подлинности на основе веб-приложения JSP в Tomcat - PullRequest
3 голосов
/ 26 августа 2009

Я настроил свое приложение на использование аутентификации на основе форм и настроил необходимые параметры в server.xml.

Когда я пытаюсь получить доступ к защищенной странице, я правильно перенаправлен на страницу входа. На странице входа в систему я предоставляю правильный ID пользователя и пароль, но он не регистрирует меня, вместо этого показывает страницу ошибки входа.

Я использую Eclipse для запуска проекта в Tomcat вместе с базой данных MySQL в Mac OS X.

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 01 сентября 2009

Наконец-то все заработало!

Поскольку я использую eclipse для развертывания своего приложения, eclipse добавляет проект с именем Servers, который содержит server.xml, который фактически используется tomcat, когда tomcat запускается с использованием eclipse.

Таким образом, решение состоит в том, чтобы внести изменения области в файл server.xml в проекте Servers в eclipse.

Спасибо, ребята, за вашу помощь и поддержку.

С наилучшими пожеланиями, Захир

2 голосов
/ 26 августа 2009

Здесь часть, определяющая безопасность для ресурса в web.xml и объявление аутентификации на основе форм.

<security-constraint>
        <web-resource-collection>       
            <web-resource-name>profile</web-resource-name>  

            <url-pattern>/myProfile</url-pattern>

        </web-resource-collection>          
        <auth-constraint>
            <role-name>member</role-name>           
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
        <form-login-page>/signin.jsp</form-login-page>
        <form-error-page>/signin_error.jsp</form-error-page>
        </form-login-config>
    </login-config>

    <security-role><role-name>member</role-name></security-role>

А вот определение области в server.xml.

<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
      driverName="com.mysql.jdbc.Driver"
   connectionURL="jdbc:mysql://localhost/dbname?user=root&amp;password=root"
       userTable="users" userNameCol="email" userCredCol="password"
   userRoleTable="user_roles" roleNameCol="role_name"/>

Кроме того, обратите внимание, что я включил необходимый файл jar mysql в папку lib tomcat.

А вот и моя форма входа.

<form class="form" id="login_form" action="j_security_check" method="post">
<input class="element" id="element_1" style="WIDTH: 255px" maxlength="200" name="j_username"/> 
<input class="element" id="element_2" style="WIDTH: 255px" type="password" maxlength="200" name="j_password"/> 
</form>

Спасибо, ребята, за попытку помочь мне, я действительно застрял в этом!

0 голосов
/ 26 августа 2009

Ваша конфигурация выглядит правильно для меня. Две возможные проблемы:

  1. Развертываете ли вы свое приложение в некорневом контексте? Если это так, вы можете изменить действие формы на /j_security_check. Вы можете попробовать это в любом случае, на самом деле - я помню, что некоторые версии Tomcat были довольно привередливы по этому поводу.

  2. Вы уверены, что у вас есть таблицы users(email, password) и user_roles(email, role_name) с соответствующими строками в них, и они доступны для пользователя, указанного в конфигурации Realm? Я знаю, что вы сказали, что вы делаете, но это единственная другая вещь, которая может пойти не так, так что не помешает перепроверить.

Если ничего из вышеперечисленного не поможет, единственное, что я могу предложить, - это загрузить исходный код Tomcat и просмотреть его во время работы в Eclipse. Для Tomcat 6 вы бы хотели поставить точку останова в org.apache.catalina.realm.JDBCRealm.authenticate(String username, String credentials) (строка 341, хотя у меня может не быть последнего источника) и пройти через open() и второй authenticate() метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...