...
- Name der Datenbanktabelle - Der Tabellenname kann frei gewählt werden, i.d.R. USER.
Pflichtfelder - Folgende Datenfelder müssen vorhanden sein:
Pflichtfelder Datentyp Erklärung USERNAME String Speichert den Benutzernamen als String. PASSWORD byte[] Speichert das Passwort als Byte-Array, i.d.R. verschlüsselt. Von RapidClipse generierte Datenstruktur
Entities
Attribute Datentyp Erklärung username String Speichert den Benutzernamen als String. password byte[] Speichert das Passwort als Byte-Array, i.d.R. verschlüsselt. Data Access
UserDAO
RoleDAO
ResourceDAO
- Weitere Datenfelder - Die USER Tabelle kann bei Bedarf auch weitere Datenfelder enthalten, da diese für die Authentifizierung nicht relevant sind.
- 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. Abweichende Tabellen- und Datenfeldnamen stellen auf Grund des später durchgeführten Mappings kein Problem dar.
...
- User Entity bereits vorhanden - Wählen Sie Ihr bereits vorhandenes User Entity aus.
Noch kein User Entity vorhanden - Klicken Sie auf /wiki/spaces/DOC/pages/31850645 um ein neues Entity User inklusive DAO UserDAO anzulegen. - Wählen Sie bei Mapping > Username das Attribut für den Benutzernamen aus.
- Wählen Sie bei Mapping > Password das Attribut für das Passwort aus.
- Wählen Sie bei Settings > Password hashing strategy den Verschlüsselungs-Algorythmus für das Passwort aus, z.B. PBKDF2WithHmacSHA1.
- Klicken Sie auf Finish.
Weiter mit Autorisierung
/wiki/spaces/DOC/pages/31850703 - 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 language java theme Confluence // Example RapidClipse cb9086f37a2e96bd5e4507f869888261
SHA1 - Secure Hash Algorithm 1 ist eine Hashfunktion, die aus einem Passwort einen 160-Bit-Hashwert erzeugt.
Code Block language java theme Confluence // 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 language java theme Confluence // 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 language java theme Confluence // 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 Entity verwendet.
Entity Attribute Datentyp Erklärung User username String Speichert den Benutzernamen als String. password byte[] Speichert das Passwort, i.d.R. verschlüsselt als Byte-Array. Project Management > Data Access - Es wird die DAO-Klasse UserDAO.java generiert. Bei Auswahl eines bereits existierenden Entities wird kein neues DAO generiert.
Project Management > Business Objects - Es wird die Klasse ExampleAuthenticationProvider.java generiert.
Code Block language java theme Confluence package com.company.example.business; import com.company.example.entities.User; import com.xdev.security.authentication.Authenticator; import com.xdev.security.authentication.AuthenticatorProvider; import com.xdev.security.authentication.CredentialsUsernamePassword; import com.xdev.security.authentication.jpa.JPAAuthenticator; import com.xdev.security.authentication.jpa.HashStrategy.PBKDF2WithHmacSHA1; public class ExampleAuthenticationProvider implements AuthenticatorProvider<CredentialsUsernamePassword, CredentialsUsernamePassword> { private static ExampleAuthenticationProvider INSTANCE; public static ExampleAuthenticationProvider getInstance() { if (INSTANCE == null) { INSTANCE = new ExampleAuthenticationProvider(); } return INSTANCE; } private JPAAuthenticator authenticator; private ExampleAuthenticationProvider() { } @Override public Authenticator<CredentialsUsernamePassword, CredentialsUsernamePassword> provideAuthenticator() { if (this.authenticator == null) { this.authenticator = new JPAAuthenticator(User.class); this.authenticator.setHashStrategy(new PBKDF2WithHmacSHA1()); } return this.authenticator; } }
Example:
Passwort verschlüsselt speichern
Code Block language java theme Confluence String password = this.passwordField.getValue(); byte[] encryptedPassword = new HashStrategy.SHA2().hashPassword(pw.getBytes()); User user = new User(); user.setUsername(this.textField.getValue()); user.setPassword(encryptedPassword); try { new UserDAO().save(user); } catch (Exception e) { Notification.show("Error", Type.ERROR_MESSAGE); }