Als Datenquelle für die Zugangsdaten wird eine Datenbanktabelle verwendet.
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
Entity
User
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
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.
Mapping
Username - Auswahl des Attributs für den Benutzernamen.
Password - Auswahl des Attributs für das Passwort.
MD5 - Message Digest Algorithm ist eine Hashfunktion, die aus einem Passwort einen 128-Bit-Hashwert erzeugt. Gilt jedoch als nicht mehr sicher.
// Example RapidClipse cb9086f37a2e96bd5e4507f869888261 |
SHA1 - Secure Hash Algorithm 1 ist eine Hashfunktion, die aus einem Passwort einen 160-Bit-Hashwert erzeugt.
// 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.
// 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.
// Example RapidClipse eafa795b8ffea05d1c8a7d5142bd4dd50fea3dd447f3585071e5c8b2ef525cef |
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 > main-java > dal - Es wird die DAO-Klasse UserDAO.java generiert. Bei Auswahl eines bereits existierenden Entities wird kein neues DAO generiert.
Project Management > main-java - Es wird die Klasse MyAuthenticationProvider.java generiert.
package com.company.demoproj; import com.company.demoproj.domain.User; import com.rapidclipse.framework.security.authentication.Authenticator; import com.rapidclipse.framework.security.authentication.AuthenticatorProvider; import com.rapidclipse.framework.security.authentication.CredentialsUsernamePassword; import com.rapidclipse.framework.security.util.PasswordHasher; import com.rapidclipse.framework.server.security.authentication.jpa.JPAAuthenticator; public class MyAuthenticationProvider implements AuthenticatorProvider<CredentialsUsernamePassword, CredentialsUsernamePassword> { private static class InitializationOnDemandHolder { final static MyAuthenticationProvider INSTANCE = new MyAuthenticationProvider(); } public static MyAuthenticationProvider getInstance() { return InitializationOnDemandHolder.INSTANCE; } private final PasswordHasher passwordHasher = PasswordHasher.Pbkdf2withHmacSha1(); private JPAAuthenticator authenticator; private MyAuthenticationProvider() { } @Override public Authenticator<CredentialsUsernamePassword, CredentialsUsernamePassword> provideAuthenticator() { if(this.authenticator == null) { this.authenticator = new JPAAuthenticator(User.class); this.authenticator.setPasswordHasher(getPasswordHasher()); } return this.authenticator; } public PasswordHasher getPasswordHasher() { return this.passwordHasher; } } |
Passwort verschlüsselt speichern
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); |