Tomcat 9 DIGEST с JDBCRealm - принимает только дайджесты, а не пароли

Недавно установленный tomcat 9 - и перенесенные приложения с tomcat 8 на tomcat 9.

Для аутентификации моей конфигурации используется JDBCRealm с базой данных mysql. Приведенная ниже конфигурация очень хорошо работала с tomcat 8, но на tomcat 9 принимались только дайджесты паролей напрямую вместо «человеческих» паролей (дайджесты хранятся в таблице tomcat_users) вместо обычных паролей. Следовательно, кажется, что алгоритм MD5 дайджеста здесь не выполняется, когда на странице входа в систему FORM вводится понятный человеку пароль.

Конфигурация внутри server.xml:

<Realm className="org.apache.catalina.realm.JDBCRealm" connectionName=“..." connectionPassword=“..." connectionURL="jdbc:mysql://127.0.0.1:3306/TOMSCHEMA" digest="MD5" driverName="org.gjt.mm.mysql.Driver" roleNameCol="role_name" userCredCol="password" userNameCol="user_name" userRoleTable="tomcat_users_roles" userTable="tomcat_users"/>

Метод аутентификации - это FORM для приложения и DIGEST для соответствующего API внутри другого приложения. Оба приложения видят друг друга в перекрестном контексте. Файл web.xml приложения содержит:

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>NAME</realm-name>
    <form-login-config>
        <form-login-page>/WEB-INF/security/protected/login.jsp</form-login-page>
        <form-error-page>/WEB-INF/security/protected/error.jsp</form-error-page>
    </form-login-config>
</login-config>

Что здесь могло быть не так? Все это довольно "стандартно" ... Какую оболочку я делаю, чтобы снова иметь на странице аутентификации FORM ввод человеческого пароля с помощью DIGEST, как это было с tomcat 8?

заранее большое спасибо

С Уважением


person Fabio Ricci    schedule 23.04.2016    source источник


Ответы (1)


Теперь вам нужно добавить в server.xml дополнительные строки, чтобы соответствовать старому методу переваривания:

     <Realm className="org.apache.catalina.realm.JDBCRealm"
        driverName="org.apache.derby.jdbc.EmbeddedDriver"
        connectionURL="jdbc:derby:/tomcat/db/zzz;create=false"
        connectionName="zzz"
        connectionPassword="zzz"
        userTable="login"
        userNameCol="login"
        userCredCol="passwd"
        userRoleTable="roles"
        roleNameCol="role"
      >
        <CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler"
          algorithm="MD5"
          iterations="1"
          saltlenght="0"
        />
      </Realm>

person Arcady    schedule 15.07.2016
comment
Спасибо за ваш ответ. Что интересно, я не нашел этого в документации Tomcat. - person akelec; 18.12.2019