src/de/uhilger/httpserver/auth/TokenAuthenticator.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/httpserver/auth/realm/MemoryRealm.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/httpserver/auth/realm/Realm.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/httpserver/auth/realm/SimpleRealm.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/httpserver/auth/realm/TestRealm.java | ●●●●● patch | view | raw | blame | history | |
src/de/uhilger/httpserver/auth/realm/User.java | ●●●●● patch | view | raw | blame | history |
src/de/uhilger/httpserver/auth/TokenAuthenticator.java
@@ -25,7 +25,6 @@ import de.uhilger.httpserver.auth.session.Session; import de.uhilger.httpserver.auth.session.SessionManager; import de.uhilger.httpserver.auth.session.Sessions; import de.uhilger.httpserver.auth.realm.TestRealm; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -39,6 +38,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import de.uhilger.httpserver.auth.realm.Realm; import de.uhilger.httpserver.auth.realm.User; import de.uhilger.httpserver.auth.session.SweepThread; import io.jsonwebtoken.JwtException; @@ -106,7 +106,7 @@ * Das Nutzerverzeichnis, gegen das die bei der Anmeldung gemachten Angaben * gepueft werden sollen */ private final Realm nutzerverzeichnis; private Realm nutzerverzeichnis; /** der Schluessel zur Signatur von Tokens */ protected final Key key; @@ -124,7 +124,7 @@ */ public TokenAuthenticator() { //this.ctx = ctx; nutzerverzeichnis = new TestRealm(); //nutzerverzeichnis = new TestRealm(); //paesse = new HashMap(); //sessions = new HashMap(); sessions = new Sessions(); @@ -226,6 +226,10 @@ } } public void setRealm(Realm realm) { this.nutzerverzeichnis = realm; } /** * Den Client zur Authentisierung auffordern * src/de/uhilger/httpserver/auth/realm/MemoryRealm.java
File was deleted src/de/uhilger/httpserver/auth/realm/Realm.java
@@ -56,20 +56,20 @@ /** * Uberpruefen, ob die Benutzerkennung und das Kennwort gueltig sind. * * @param nutzerId die Kennung des Benutzers * @param user der Benutzer * @param kennwort das Kennwort des Benutzers * @return true, wenn die Angaben stimmen, false wenn nicht */ public boolean isValid(String nutzerId, String kennwort); public boolean isValid(String userId, String kennwort); /** * Pruefen, ob ein Benutzer eine Rolle hat * * @param nutzerId die Kennung des Benutzers * @param rollenId die Kennung der Rolle * @param user der Benutzer * @param roleId die Kennung der Rolle * @return true, wenn der Benutzer die Rolle hat, false wenn nicht */ public boolean hasRole(String nutzerId, String rollenId); public boolean hasRole(String userId, String roleId); /** * Den Namen dieses Realms ermitteln src/de/uhilger/httpserver/auth/realm/SimpleRealm.java
New file @@ -0,0 +1,102 @@ /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.uhilger.httpserver.auth.realm; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; /** * * test=testRolle * ulrich=testRolle,andereRolle * * @author Ulrich Hilger * @version 1, 03.06.2021 */ public class SimpleRealm implements Realm { public static final String LIST_INDICATOR = "="; public static final String ROLE_SEPARATOR = ","; public static final String COMMENT_INDICATOR = "#"; private String name; private Map<String, User> users; private Map<String, List> userRoles; public SimpleRealm() { users = new HashMap<>(); userRoles = new HashMap<>(); } public void setName(String name) { this.name = name; } public void readFromFile(File file) throws IOException { BufferedReader r = new BufferedReader(new FileReader(file)); String line = r.readLine(); while(line != null) { parse(line); line = r.readLine(); } r.close(); } private void parse(String line) { if(!line.startsWith(COMMENT_INDICATOR)) { String[] teile = line.split(LIST_INDICATOR); String[] rollen = teile[1].split(ROLE_SEPARATOR); String userId = teile[0]; User user = new User(); user.setName(userId); user.setPassword(rollen[0]); ArrayList rollenListe = new ArrayList(); for(int i = 1; i < rollen.length; i++) { rollenListe.add(rollen[i]); } users.put(userId, user); userRoles.put(userId, rollenListe); } } /* ------------ Realm implementation -------------- */ @Override public boolean isValid(String userId, String kennwort) { Object o = users.get(userId); if(o instanceof User) { User user = (User) o; return user.getPassword().equals(kennwort); } else { return false; } } @Override public boolean hasRole(String userId, String rollenId) { Object o = userRoles.get(userId); if(o instanceof List) { List roles = (List) o; return roles.contains(rollenId); } else { return false; } } @Override public String getName() { return name; } } src/de/uhilger/httpserver/auth/realm/TestRealm.java
File was deleted src/de/uhilger/httpserver/auth/realm/User.java
@@ -25,7 +25,26 @@ public class User { private String name; private String password; private String hash; //private String hash; //private List<String> roles; public User() { //this.roles = new ArrayList(); } /* public void addRole(String role) { roles.add(role); } public void revokeRole(String role) { roles.remove(role); } public boolean hasRole(String role) { return roles.contains(role); } */ public String getName() { return name; @@ -35,6 +54,7 @@ this.name = name; } public String getPassword() { return password; } @@ -43,6 +63,8 @@ this.password = password; } /* public void setHash(String hash) { this.hash = hash; } @@ -50,5 +72,20 @@ public String getHash() { return hash; } */ @Override public int hashCode() { return this.getName().hashCode(); } @Override public boolean equals(Object obj) { if(obj instanceof User) { return this.getName().equals(((User) obj).getName()); } else { return false; } } }