JDBCRealm правильно настроен, но нет успешного подключения

Я публикую этот вопрос после тщательного поиска в Интернете, но не нашел похожей ситуации. Я пытаюсь использовать JDBCRealm для аутентификации пользователей в простом тестовом веб-приложении, развернутом с помощью Tomat 7.0.42 и MariaDB 5.5 в среде разработки. Я выполнил все шаги, описанные в Tomcat How-To. и это то, что у меня есть:

Дескриптор развертывания моих приложений:

<error-page>
    <error-code>403</error-code>
    <location>/WEB-INF/jsp/desautorizado.jsp</location>
</error-page>

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

    <web-resource-collection>
        <web-resource-name>Paginas</web-resource-name>
        <url-pattern>/sel_tipo_tabla.jsp</url-pattern>          
    </web-resource-collection>

    <auth-constraint>
        <role-name>estandar</role-name>
    </auth-constraint>

    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<security-role>
    <role-name>estandar</role-name>
</security-role>    

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/WEB-INF/jsp/login.jsp</form-login-page>
        <form-error-page>/WEB-INF/jsp/desautorizado.jsp</form-error-page>
    </form-login-config>        
</login-config>

Tomcat conf/server.xml:

<Engine defaultHost="localhost" name="Catalina">
   <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
      <Context docBase="MyAppStruts" path="/MyAppStruts" reloadable="true" source="org.eclipse.jst.jee.server:MyAppStruts">
         <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.JDBCRealm"
               driverName="org.mariadb.jdbc.Driver"
               connectionURL="jdbc:mariadb://localhost:3306/desa"
               connectionName="ruben"
               connectionPassword="acceso"
               userTable="usuarios"
               userNameCol="usuario"
               userCredCol="password"
               userRoleTable="roles"
               roleNameCol="rol" />
      </Realm>
    </Context>        
  </Host>
</Engine>

Он отлично работает, если вместо этого я использую UserDatabaseRealm (по умолчанию Tomcat использует файл conf/tomcat-users.xml). Однако меня всегда перенаправляют на страницу с ошибкой, если я использую JDBCRealm, даже если я добавляю существующего пользователя/пароль в базу данных.

Я забыл упомянуть, что использую Eclipse для развертывания, поэтому все относительно $CATALINA_BASE и НЕ $CATALINA_HOME. В средах разработки $CATALINA_BASE указывает на $(WORKSPACE_DIR)/.metadata/.plugins/org.eclipse.wst.server.core/tmp0. Таким образом, файл jar драйвера MariaDB находится в $(WORKSPACE_DIR)/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/lib/mariadb-java-client.jar, а сертификат открытого ключа находится в $(WORKSPACE_DIR )/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/hogar.keystore (с этим проблем нет).

Просматривая логи, я заметил, что всякий раз, когда я сбрасываю сервер (только сбрасываю, даже до запуска первого запроса к моему приложению), пишется следующая строка:

127.0.0.1 - - [27.10.2013:21:29:32 +0100] "GET / HTTP/1.1" 404 961

На вкладке консоли Eclipse не отображаются ошибки или исключения. Я предполагаю, что Tomcat не может установить соединение с базой данных, но почему?


person user2925957    schedule 27.10.2013    source источник


Ответы (1)


Просто значение роли для моего пользователя в базе данных не соответствовало значению ‹security-role› и ‹auth-constraint› в моем дескрипторе развертывания.

person user2925957    schedule 31.10.2013