Authentifizierung fuer Modul jdk.httpserver
ulrich
2021-06-03 696a4b57fddb96f3e76fefb3d8bf6b76e92bf3c3
SimpleRealm eingebaut
2 files deleted
3 files modified
1 files added
336 ■■■■ changed files
src/de/uhilger/httpserver/auth/TokenAuthenticator.java 10 ●●●● patch | view | raw | blame | history
src/de/uhilger/httpserver/auth/realm/MemoryRealm.java 85 ●●●●● patch | view | raw | blame | history
src/de/uhilger/httpserver/auth/realm/Realm.java 10 ●●●● patch | view | raw | blame | history
src/de/uhilger/httpserver/auth/realm/SimpleRealm.java 102 ●●●●● patch | view | raw | blame | history
src/de/uhilger/httpserver/auth/realm/TestRealm.java 90 ●●●●● patch | view | raw | blame | history
src/de/uhilger/httpserver/auth/realm/User.java 39 ●●●●● 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;
    }
  }
  
}