Forbered login-system
I denne uge skal vi arbejde med, hvordan en webapplikation modtager en request, behandler den og sender en response tilbage.
Vi skal bygge et lille login-system med Java, HTML og Javalin. Inden da skal du forberede de Java-klasser og HTML-sider, som vi skal bruge.
Du skal ikke få login-systemet til at virke endnu. Det gør vi sammen senere på ugen.
Opret et nyt projekt i IntelliJ.
Vælg:
- Java (selvfølgelig..)
- Build system: Maven (ikke IntelliJ)
- JDK 17 eller nyere
Giv projektet et passende navn.
Når projektet er oprettet, har IntelliJ blandt andet oprettet:
src
└── main
└── java
└── resources
test
└── java
Bemærk at main og java ikke er pakker, som I kender dem, men standardmapper som Maven opretter. Maven betragter java som vores root for kildekode.
Du skulle også gerne have en pom.xml-fil, men den skal du ikke gøre noget med endnu.
I src/main/java skal du oprette følgende pakker:
controllers
entities
factories
services
Du skal senere kunne se denne struktur:
src/main/java
├── controllers
│ └── UserController.java
├── entities
│ └── User.java
├── factories
│ └── UserFactory.java
└── services
└── UserService.java
I src/main/resources skal du oprette mappen:
templates
Her skal du senere have:
src/main/resources
└── templates
├── login.html
└── welcome.html
Opret User i pakken entities.
En User skal have:
usernamepassword
Lav:
- attributter
- constructor
- getters
- setters
Du skal kunne oprette en bruger sådan:
User user = new User("user1", "password1");
Opret UserFactory i pakken factories.
Lav en metode, som opretter og returnerer en liste med 10 brugere.
Du vælger selv brugernavne og passwords.
Metoden skal kunne bruges sådan:
List<User> users = UserFactory.createUsers();
Opret UserService i pakken services.
UserService skal holde en liste af brugere. Listen skal ved oprettelsen af UserService fyldes med brugere fra UserFactory.
Den skal som minimum have følgende metoder:
public void addUser(User user)
public User getUser(String username)
public User login(String username, String password)
public User createUser(String username, String password)
public boolean validatePassword(String password)
Tilføjer en bruger til listen.
Finder en bruger ud fra username.
Hvis brugeren findes, returneres brugeren.
Hvis brugeren ikke findes, returneres null.
Finder brugeren med det angivne username og kontrollerer password.
Hvis username og password passer, returneres brugeren.
Hvis login ikke lykkes, returneres null.
Opretter en ny bruger.
Username og password skal være udfyldt, og username må ikke allerede være brugt.
Hvis brugeren kan oprettes, returneres den nye bruger.
Hvis brugeren ikke kan oprettes, returneres null.
Validerer gyldighed af en ny brugers password.
Metoden skal som minimum undersøge om et password indeholder mellem 8 og 15 karakterer. Hvis du vil lege med regex kan du også undersøge om det indeholder mindst ét stort bogstav, et tal og et specialtegn.
Du må gerne bruge en main-metode til at undersøge, om dine klasser virker.
Prøv for eksempel at:
- oprette en
User - hente listen fra
UserFactory - finde en bruger med
getUser - logge ind med korrekt username og password
- forsøge at logge ind med forkert password
- oprette en ny bruger
- forsøge at oprette en bruger med et username, der allerede findes
Du skal ikke lave unit tests endnu. Dem kommer vi tilbage til senere.
Opret en tom UserController i pakken controllers.
Vi skal bruge den senere, når vi kobler Java-klasserne sammen med Javalin.
Opret login.html i:
src/main/resources/templates
Siden skal indeholde en loginformular med:
- username
- password
- en knap til at logge ind
Formularen skal være forberedt til at sende en POST request til:
/login
Du skal ikke få den til at virke endnu.
Opret welcome.html i:
src/main/resources/templates
Lav en simpel velkomstside, som kan bruges efter et succesfuldt login.
Den kan for eksempel indeholde:
<h1>Velkommen!</h1>
<p>Du er nu logget ind.</p>
Senere skal vi gøre siden dynamisk, så den kan vise information om den bruger, der er logget ind.
Du skal have:
src/main
├── java
│ ├── controllers
│ │ └── UserController.java
│ ├── entities
│ │ └── User.java
│ ├── factories
│ │ └── UserFactory.java
│ └── services
│ └── UserService.java
│
└── resources
└── templates
├── login.html
└── welcome.html
Du skal kunne teste dine Java-klasser med en main.
Du skal ikke koble Java, HTML og Javalin sammen endnu. Det gør vi sammen i løbet af ugen.