Jak zachować dane zalogowanego użytkownika?

0

Kiedyś napisałem program w Delphi który teraz chciałbym odtworzyć w Javie.

W skrócie program służy do zapisywania pewnych informacji w bazie danych, jest kilku użytkowników.

W starej wersji podczas logowania po sprawdzeniu podanych danych zapisywałem sobie Id użytkownika w globalnej zmiennej USER i gdy tylko potrzebowałem to z tej zmiennej globalnej ten identyfikator pobierałem, np. podczas dodawania nowych rekordów by oznaczyć kto dodał.

Podobnie gdy użytkownik wybierał rekord do edycji to w oknie z listą rekordów ustawiałem globalną zmienną REKORD a następnie otwierałem okno edycji i w nim pobierałem Id rekordu ze zmiennej globalnej by na jego podstawie pobrać dane rekordu.

Jak to zrobić w Javie? Nie pytam jak uzyskać zmienne globalne bo tego chyba w Javie nie ma. Chodzi mi o to jak tego typu sytuacje koduje się w Javie tak by być w zgodzie z aktualnymi zasadami, wzorcami, konwencjami itp?

1

Jeśli to ma być aplikacja webowa to podejście z trzymaniem id użytkownika w globalnej zmiennej nie ma sensu (co jeśli będzie zalogowanych wielu użytkowników?) - tutaj polecam Spring Security. Jeśli to jest aplikacja okienkowa, to możesz użyć zmiennych statycznych (to są odpowiedniki zmiennych globalnych w Javie).

0

Aplikacja okienkowa. Czyli takie coś

public class Globalne {
    public static int User;
    public static int Rekord;
}

ale na stackoverflow ostrzegają cytuję

Be careful when doing this - when the Global class gets unloaded the variables will be undefined null.

czy to na pewno najlepsze rozwiązanie?

0
AngelEyes napisał(a):
public class Globalne {
    public static int User;
    public static int Rekord;
}

Jeśli nie zainicjalizujesz tych zmiennych statycznych to będą one nullem, naturalne dla Javy ;). Nie jest to najlepsze rozwiązanie - można pozbyć się tych zmiennych statycznych.

0
Marszal napisał(a):

Jeśli nie zainicjalizujesz tych zmiennych statycznych to będą one nullem, naturalne dla Javy ;).

Oczywiście. Tylko pytanie czy w ciągu cyklu życia aplikacji ta wartość nie ulegnie zmianie poza moja kontrolą.

Marszal napisał(a):

Nie jest to najlepsze rozwiązanie - można pozbyć się tych zmiennych statycznych.

W jaki sposób pozbyć się? Załóżmy że jest dodawany nowy rekord. Skąd w tej chwili pobrać Id aktualnego użytkownika jeśli nie ze zmiennej globalnej? Mi brakuje trochę wyobraźni w tym temacie bo jeśli chodzi o Javę to jestem początkujący.

1
AngelEyes napisał(a):

W jaki sposób pozbyć się? Załóżmy że jest dodawany nowy rekord. Skąd w tej chwili pobrać Id aktualnego użytkownika jeśli nie ze zmiennej globalnej? Mi brakuje trochę wyobraźni w tym temacie bo jeśli chodzi o Javę to jestem początkujący.

class ApplicationData {
  private LoggedUser loggedUser;
  
  public void setLoggedUser(LoggedUser user) {
    loggedUser = user;
  }
  
  public int getLoggedUserId() {
    return loggedUser.getId();
  }
}

class UserDao {
  public void saveUserRecord(int id, String record) {}
}

public class Main {
  public static void main(String[] args) {
    ApplicationData applicationData = new ApplicationData();
    applicationData.setLoggedUser(new LoggedUser());
    
    UserDao userDao = new UserDao();
    userDao.saveUserRecord(applicationData.getLoggedUserId(), "record");
  }
}

Oczywiście w dużej aplikacji obiekt ApplicationData będzie pewnie w innym miejscu ulokowany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1