ulrich@undisclosed
2020-03-30 3ae5ee41be958e59be174a6e68e05446e8baf355
Digester auf die Nutzung der 'matches'-Methode umgestellt
4 files modified
37 ■■■■ changed files
src/java/de/uhilger/um/Digester.java 13 ●●●●● patch | view | raw | blame | history
src/java/de/uhilger/um/TomcatDigester.java 12 ●●●●● patch | view | raw | blame | history
src/java/de/uhilger/um/UmDigester.java 5 ●●●●● patch | view | raw | blame | history
src/java/de/uhilger/um/api/Profil.java 7 ●●●● patch | view | raw | blame | history
src/java/de/uhilger/um/Digester.java
@@ -45,4 +45,17 @@
   * @return  der verschlüsselte Ausdruck
   */
  String digest(String text, String algorithm, String encoding);
  /**
   * Einen Klartext-Ausdruck mit seiner verschluesselten Fassung vergleichen
   * @param inputCredentials der Klartext-Ausdruck fuer den festgestellt werden soll,
   * ob er zum gespeicherten Ausdruck passt
   * @param storedCredentials  der gespeicherte (verschluesselte) Ausdruck, fuer den
   * festgestellt werden soll, ob er zum Klartext-Ausdruck passt
   * @param algorithm  der Verschluesselungs-Algorithmus
   * @param encoding  das Encoding
   * @return wahr, wenn der Klartext-Ausdruck dem hinterlegten verschluesselten Ausdruck
   * entspricht, falsch, wenn nicht
   */
  boolean matches(String inputCredentials, String storedCredentials, String algorithm, String encoding);
}
src/java/de/uhilger/um/TomcatDigester.java
@@ -57,5 +57,17 @@
    mh.setEncoding(encoding);
    return mh.mutate(text);
  }
  @Override
  public boolean matches(String inputCredentials, String storedCredentials, String algorithm, String encoding) {
    MessageDigestCredentialHandler mh = new MessageDigestCredentialHandler();
    try {
      mh.setAlgorithm(algorithm);
    } catch (NoSuchAlgorithmException ex) {
      Logger.getLogger(TomcatDigester.class.getName()).log(Level.SEVERE, null, ex);
    }
    mh.setEncoding(encoding);
    return mh.matches(inputCredentials, storedCredentials);
  }
  
}
src/java/de/uhilger/um/UmDigester.java
@@ -21,5 +21,10 @@
        */
        return text;
    }
  @Override
  public boolean matches(String inputCredentials, String storedCredentials, String algorithm, String encoding) {
    return true;
  }
    
}
src/java/de/uhilger/um/api/Profil.java
@@ -43,11 +43,6 @@
    
      String digesterClassName = getServletContext().getInitParameter(P_DIGESTER);
      Digester digester = (Digester) Class.forName(digesterClassName).newInstance();
      /*
      MD5 geht nicht mehr,
      vgl. http://stackoverflow.com/questions/39967289/how-to-use-digest-authentication-in-tomcat-8-5
      */
      String digestedCurrentPw = digester.digest(currentPw, Digester.SHA256, null);
      PersistenceManager pm = getDb();
      logger.fine(getSql(SQL_GET_USER));
      List list = pm.select(getSql(SQL_GET_USER), getMapper(MP_USER), Record.WITHOUT_BLOBS, userId);
@@ -55,7 +50,7 @@
        Object o = list.get(0);
        if(o instanceof User) {
          User u = (User) o;
          if(u.getPw().equals(digestedCurrentPw)) {
          if(digester.matches(currentPw, u.getPw(), Digester.SHA256, null)) {
            String digestedNewPw = digester.digest(newPw, Digester.SHA256, null);
            u.setPw(digestedNewPw);
            pm.update(u, getMapper(MP_USER));