Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Als Datenquelle für die Zugangsdaten wird eine Datenbanktabelle (z.B. USER) verwendet, in der die Datenfelder USERNAME und PASSWORD vorhanden sein müssen. Anstelle von USER kann eine belieibige Bezeichnung gewählt werden. Ebenso kann die USER Tabelle  verwendet.

  • Name des Entity - Der Entity-Name kann frei gewählt werden, i.d.R. User.
  • Pflichtfelder - Folgende Datenfelder müssen vorhanden sein: 

    PflichtfelderDatentypErklärung
    UsernameStringSpeichert den Benutzernamen als String.
    Passwordbyte[]Speichert das Passwort als Byte-Array, i.d.R. verschlüsselt.


  • Von RapidClipse generierte Datenstruktur 

    • Entity

      • User

        AttributeDatentypErklärung
        usernameStringSpeichert den Benutzernamen als String.
        passwordbyte[]Speichert das Passwort als Byte-Array, i.d.R. verschlüsselt.


    • Data Access

      • UserDAO


  • Weitere Datenfelder - Die USER Tabelle kann bei Bedarf auch weitere Datenfelder enthalten, da diese für die Authentifizierung nicht relevant sind. Häufig benötigte Informationen zu einem Benutzer sind u.a. E-Mail, Status (aktiviert oder deaktiviert), Foto, Zeitzone, Letzte Session, IP-Addresse, URL zu einer Log-Datei etc.
    • Umgang mit vorhandener USER Tabelle

...

    • - Ist in

...

    • Ihrer Datenbank

...

    • bereits eine Tabelle für die Verwaltung von Benutzern vorhanden, stellen Sie sicher, dass für diese ein entsprechendes Entity mit dazugehörigem DAO in Ihrem Project Management unter Entities bzw. Data Access vorhanden ist. Falls nicht, können Sie das fehlende Entity und DAO mit der Import-Funktion Create JPA entities from table generieren lassen.

...

  1. Selektieren Sie bei Provider type > Database.
  2. Klicken Sie Next >.

  3. Wählen Sie bei Entity das bereits existierendes Entity User für die Benutzerdaten aus.
  4. Wählen Sie bei Settings den Verschlüsselungs-Algorythmus aus, z.B. MD5.
  5. Klicken Sie auf Finish.
    Image Removed

Noch keine USER Tabelle in der Datenbank vorhanden

...

Klicken Sie Next >.

...

    • Abweichende Tabellen- und Datenfeldnamen stellen auf Grund des später durchgeführten Mappings kein Problem dar. 


  1. User Entity bereits vorhanden - Wählen Sie Ihr bereits vorhandenes User Entity aus.
    Noch kein User Entity vorhanden - Klicken Sie auf New Entity... um ein neues Entity User mit den Attributen username vom Typ String sowie password vom Typ byte anzulegen.  inklusive DAO UserDAO anzulegen. 
    1. Wählen Sie bei Mapping > Username das Attribut für den Benutzernamen aus.
    2. Wählen Sie bei Mapping > Password das Attribut für das Passwort aus.
    3. Wählen Sie bei Settings > Password hashing strategy den Verschlüsselungs-Algorythmus für das Passwort aus, z.B. 
    MD5
    1. PBKDF2WithHmacSHA1.
    2. Klicken Sie auf Finish.
    Image Removed
  2. Exportieren Sie das User Entity mit der Export-Funktion Create tables from JPA entities in Ihre Datenbank.
Optionen:

    1. Image Added
Weiter mit Autorisierung

Datenbanktabelle USER anlegen - Für das neue Entity User muss eine entsprechende Tabelle USER in der Datenbank angelegt werden. Dafür bietet Ihne RapidClipse eine Export-Funktion.

Optionen:
  • Mapping

    • Username - Auswahl des Attributs für den Benutzernamen. 

      • Password - Auswahl des Attributs für das Passwort. 

    • Password hashinig strategy
      • MD5 - Message Digest Algorithm ist eine Hashfunktion, die aus einem Passwort einen 128-Bit-Hashwert erzeugt. Gilt jedoch als nicht mehr sicher.

        Code Block
        languagejava
        themeConfluence
        // Example RapidClipse
        cb9086f37a2e96bd5e4507f869888261


      • SHA1 - Secure Hash Algorithm 1 ist eine Hashfunktion, die aus einem Passwort einen 160-Bit-Hashwert erzeugt. 

        Code Block
        languagejava
        themeConfluence
        // Example RapidClipse
        64d88c018c7ced7e248e42b48593bd82c5e80ef2


      • SHA2 - Secure Hash Algorithm 2 ist der aktuell empfohlene Standard für SHA, die aus einem Passwort einen 224-, 256-, 384- oder 512-Bit-Hashwert erzeugt.

        Code Block
        languagejava
        themeConfluence
        // Example RapidClipse
        eafa795b8ffea05d1c8a7d5142bd4dd50fea3dd447f3585071e5c8b2ef525cef


    • PBKDF2WithHmacSHA1 - Kombination aus PBKDF2, HMAC und SHA1, die einen 160-Bit-Hahswert erzeugt. PBKDF2 (Password-Based Key Derivation Function 2) ist eine genormte Funktion für die Ableitung eines Schlüssels aus einem Passwort und wird oft für die passwort-basierte Authentifizierung benutzt. HMAC (Keyed-Hash Message Authentication Code) ist ein Message Authentication Code (MAC), dessen Konstruktion auf einer kryptografischen Hash-Funktion basiert. SHA1 ist eine Hashfunktion, die aus einem Passwort einen 160-Bit-Hashwert erzeugt. 

      Code Block
      languagejava
      themeConfluence
      // Example RapidClipse
      eafa795b8ffea05d1c8a7d5142bd4dd50fea3dd447f3585071e5c8b2ef525cef


Ergebnis:
  • Project Management >  Entities - Es wird die Entity-Klasse User.java mit den Attributen username vom Typ String sowie password vom Typ byte[] generiert oder durch Auswahl ein bereits existierendes User Entity existierendes Entity verwendet. 
    Image RemovedProject Management > Data Access 

    EntityAttributeDatentypErklärung
    UserusernameStringSpeichert den Benutzernamen als String.
    passwordbyte[]Speichert das Passwort, i.d.R. verschlüsselt als Byte-Array.


    • Project Management > main-java > dal - Es wird die

    Entity
    • DAO-Klasse UserDAO.java

     generiert oder durch
    •  generiert. Bei Auswahl eines bereits

    existierendes User Entity das entsprecehnde UserDAO verwendet
    • existierenden Entities wird kein neues DAO generiert

    • Project Management > 

    Business Objects 
    • main-java - Es wird die Klasse 

    ExampleAuthenticationProvider
    • MyAuthenticationProvider.java generiert.

      Code Block
      languagejava
      themeConfluence
      package com.company.
    example.business
    • demoproj;
      
      import com.company.
    example
    • demoproj.
    entities
    • domain.User;
      import com.rapidclipse.
    xdev
    • framework.security.authentication.Authenticator;
      import com.rapidclipse.
    xdev
    • framework.security.authentication.AuthenticatorProvider;
      import com.rapidclipse.
    xdev
    • framework.security.authentication.CredentialsUsernamePassword;
      import com.rapidclipse.
    xdev
    • framework.security.
    authentication
    • util.
    jpa.JPAAuthenticator
    • PasswordHasher;
      import com.rapidclipse.framework.
    xdev
    • server.security.authentication.jpa.
    HashStrategy.MD5
    • JPAAuthenticator;
      
      
      public class 
    ExampleAuthenticationProvider
    • MyAuthenticationProvider
      
    • 	implements AuthenticatorProvider<CredentialsUsernamePassword, CredentialsUsernamePassword>
      {
      	private static 
    ExampleAuthenticationProvider
    • class 
    INSTANCE;
    • InitializationOnDemandHolder
      	{
      		
    public
    • final static 
    ExampleAuthenticationProvider
    • MyAuthenticationProvider 
    getInstance()
    • INSTANCE 
    {
    • = 
    if
    • new MyAuthenticationProvider(
    INSTANCE == null
    • );
      
    {
    • 	}
      	
      	
    INSTANCE
    • public 
    =
    • static 
    new
    • MyAuthenticationProvider 
    ExampleAuthenticationProvider
    • getInstance()
    ;
    • 
      	
    }
    • {
      		return InitializationOnDemandHolder.INSTANCE;
      	}
      	
      	private final PasswordHasher passwordHasher = PasswordHasher.Pbkdf2withHmacSha1();
      	private JPAAuthenticator     authenticator;
      	
      	private 
    ExampleAuthenticationProvider
    • MyAuthenticationProvider()
      	{
      	}
      	
      	@Override
      	public Authenticator<CredentialsUsernamePassword, CredentialsUsernamePassword> provideAuthenticator()
      	{
      		if
    • (this.authenticator == null)
      		{
      			this.authenticator = new JPAAuthenticator(User.class);
      			this.authenticator.
    setHashStrategy
    • setPasswordHasher(
    new MD5
    • getPasswordHasher());
      		}
      		
      		return this.authenticator;
      	}
      	
      	public PasswordHasher getPasswordHasher()
      	{
      		return this.passwordHasher;
      	}
      }


Example:
  • Passwort verschlüsselt speichern

    Image Added

    User Entity - Das generierte User Entity kann jederzeit mit zusätzlichen Attributen erweitert werden.
    Code Block
    languagejava
Hinweis:
  • themeConfluence
    final String         password          = this.passwordField.getValue();
    final PasswordHasher passwordHasher    = MyAuthenticationProvider.getInstance().getPasswordHasher();
    final byte[]         encryptedPassword = passwordHasher.hashPassword(password.getBytes());
    		
    final User user = new User();
    user.setPassword(encryptedPassword);
    		
    new UserDAO().save(user);


Hinweis:
  • Passwort speichern und editieren - Formulare werden üblicherweise sowohl für Speichern und Editieren von Daten verwendet. Für das Speichern und Editieren von Passwörter müssen Sie jedoch unterschiedliche Formulare erstellen. Denn beim Speichern wird das Passwort verschlüsselt in die Datenbanktabelle geschrieben, sodass Sie beim lesenden Zugriff immer ein verschlüsseltes Passwort erhalten. Ein erneutes Speichern, würde das bereits verschlüsselte Passwort ein weiteres Mal verschlüsseln und dadurch ungültig machen.