Skip to content

Commit

Permalink
Merge origin/master
Browse files Browse the repository at this point in the history
  • Loading branch information
AnsgarLichter committed Mar 22, 2019
2 parents e52c24d + c5cdb99 commit a88785d
Show file tree
Hide file tree
Showing 3 changed files with 178 additions and 42 deletions.
133 changes: 132 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,136 @@
# JustDoIt

To-Do-Management Applikation for Java.

Schulprojekt für die Vorlesung Webbasierte Datenbankanwendungen an der DHBW Karlsruhe.


#### Kurzbeschreibung

Dies ist ein Beispiel für eine in Java realisierte, serverseitige MVC-Webanwendung.
Die Anwendung setzt dabei ganz klassisch auf der „Jakarta Enterprise Edition”
(ehemals „Java Enterprise Edition“) auf und läuft daher in einem speziell dafür
ausgelegten Applikationsserver. Sämtliche Anwendungslogik wird dabei vom Server
implementiert, so dass für jedes URL-Pattern der Anwendung ein komplett serverseitig
generierte HTML-Seite abgerufen und im Browser dargestellt wird.


## Hinweise zum Deployment

#### Verwendete Technologien

Während der Entwicklung haben wir einen speziell konfigurierten TomEE-Server
genutzt. Als Datenbank wurde die Derby-Datenbank verwendet. In unseren Dateien,
die bei der Projektabgabe hochgeladen werden, ist beides enthalten.
Die App nutzt Maven als Build-Werkzeug und zur Paketverwaltung. Auf diese Weise
werden die für Jakarta EE notwendigen APIs, darüber hinaus aber keine weiteren
Abhängigkeiten, in das Projekt eingebunden. Der Quellcode der Anwendung ist dabei
wie folgt strukturiert:

* **Servlets** dienen als Controller-Schicht und empfangen sämtliche HTTP-Anfragen.
* **Enterprise Java Beans** dienen als Model-Schicht und kapseln die fachliche Anwendungslogik.
* **Persistence Entities** modellieren das Datenmodell und werden für sämtliche Datenbankzugriffe genutzt.
* **Java Server Pages** sowie verschiedene statische Dateien bilden die View und generieren den
auf dem Bildschirm angezeigten HTML-Code.

Folgende Entwicklungswerkzeuge kommen dabei zum Einsatz:

* [NetBeans:](https://netbeans.apache.org/) Integrierte Entwicklungsumgebung für Java und andere Sprachen
* [Maven:](https://maven.apache.org/) Build-Werkzeug und Verwaltung von Abhängigkeiten
* [Git:](https://git-scm.com/") Versionsverwaltung zur gemeinsamen Arbeit am Quellcode
* [TomEE:](https://tomee.apache.org/) Applikationsserver zum lokalen Testen der Anwendung
* [Derby:](https://db.apache.org/derby/) In Java implementierte SQL-Datenbank zum Testen der Anwendung


#### Konfiguration der Benutzerauthentifizierung

In den Klassen justdoit.common.jpa.User sowie justdoit.common.ejb.UserBean wurde
die Benutzerverwaltung realisiert.
Die Anwendung verwaltet hierfür eine eigene Tabelle in der Datenbank, in der
die Benutzer,Passwörter und zugeordneten Benutzergruppen gespeichert werden.

Die Authentifizierung und Autorisierung werden allerdings vom
Applikationsserver vorgenommen, der hierfür entsprechend konfiguriert
werden muss. Das heißt, der Applikationsserver muss wissen, in welchen Tabellen
die Benutzer gespeichert sind. Dies erfolgt anhand den Einstellungen in der
Datei `/Web Pages/WEB-INF/web.xml`.

Dort befinden sich die anwendungsspezifischen Einstellungen, welche Aktionen
welche Berechtigungen erfordern. Am Ende wird dabei mit folgender Zeile

```
<realm-name>justdoit</realm-name>
```

das Realm zugewiesen. Realm ist dabei nur ein schöner Begriff für eine
beliebige Datenbank mit Benutzern, ihren Passwörtern und Berechtigungen.

Im TomEE geschieht dies durch folgende Zeilen in der Konfigurationsdatei
`conf/server.xml`:
Die Definition des Realms geschieht durch folgende Zeilen in der Datei
`/Web Pages/META-INF/context.xml`:

```
<Realm
className = "org.apache.catalina.realm.DataSourceRealm"
dataSourceName = "Default-Database-Unmanaged"
userTable = "justdoit.justdoit_user"
userNameCol = "username"
userCredCol = "password_hash"
userRoleTable = "justdoit.user_group"
roleNameCol = "groupname"
>
<CredentialHandler
className = "org.apache.catalina.realm.MessageDigestCredentialHandler"
algorithm = "SHA-256"
/>
</Realm>
```

Die unter `dataSourceName` genannte Datenbankverbindung muss dabei in der Datei
`conf/tomee.xml` wie folgt definiert werden:

```
<Resource id="Derby-Sample-Managed" type="javax.sql.DataSource">
JdbcDriver = org.apache.derby.jdbc.ClientDriver
JdbcUrl = jdbc:derby:https://localhost:1527/sample
UserName = app
Password = app
JtaManaged = true
</Resource>
<Resource id="Derby-Sample-Unmanaged" type="javax.sql.DataSource">
JdbcDriver = org.apache.derby.jdbc.ClientDriver
JdbcUrl = jdbc:derby:https://localhost:1527/sample
UserName = app
Password = app
JtaManaged = false
</Resource>
```

Das Beispiel geht dabei von der Derby-Beispieldatenbank aus, die Bestandteil
von Netbeans ist.


## Hinweise zum E-Mail-Versand

Der E-Mail-Versand wird mit der [JavaMail API](https://javaee.github.io/javamail/docs/api/) umgesetzt.
Ein Teil der benötigten Einstellungen wird in einer JSON Datei gespeichert:
`src/main/resources/mailConfig.json`

```
{
"from": "",
"host": "",
"port": "",
"username": "",
"password": ""
}
```

* `from`: Adresse die als Absenderadresse angezeigt werden soll.
* `host`: Adresse des Postausgangssevers (SMTP-Server)
* `port`: Port des Postausgangsservers (SMTP-Server)
* `username`: Benutzername des Kontos beim Mail-Provider
* `password`: Passwort des Kontos beim Mail-Provider
53 changes: 29 additions & 24 deletions src/main/java/Hinweise zum Deployment
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,42 @@ Hinweise zum Deployment
=======================


Der TomEE-Applikationsserver empfiehlt sich
Der TomEE-Applikationsserver wird empfohlen
-------------------------------------------

Während der Entwicklung haben wir einen speziell konfiguriertern TomEE-Server
genutzt. Als Datenbank haben wir die Derby-Datenbank benutzt. In unsere Dateien,
die wir Ihnen bei der Projektabgabe hochgeladen haben, haben wir Ihnen beide zur
Verfügung gestellt.
Während der Entwicklung haben wir einen speziell konfigurierten TomEE-Server
genutzt. Als Datenbank wurde die Derby-Datenbank verwendet. In unseren Dateien,
die bei der Projektabgabe hochgeladen werden, ist beides enthalten.


Konfiguration der Benutzerauthentifizierung
-------------------------------------------

In den Klassen ....jpa.User.java sowie ….ejb.UserBean haben wir unsere
Benutzerverwaltung realisiert.
Die Anwendung verwaltet hierfür eine eigene Tabelle, in der die Benutzer,
Passwörter und zugeordneten Benutzergruppen (Steuerung der Berechtigungen)
gespeichert werden.
In den Klassen justdoit.common.jpa.User sowie justdoit.common.ejb.UserBean wurde
die Benutzerverwaltung realisiert.
Die Anwendung verwaltet hierfür eine eigene Tabelle in der Datenbank, in der
die Benutzer,Passwörter und zugeordneten Benutzergruppen gespeichert werden.

Die Authentifizierung und Autorisierung werden allerdings vom
Applikationsserver vorgenommen, der hierfür entsprechend konfiguriert
werden muss. Das heißt, der Applikationsserver muss wissen, in welchen Tabellen
die Benutzer gespeichert sind. Dies erfolgt anhand den Einstellungen in der
Datei /Web Pages/WEB-INF/web.xml.
Datei `/Web Pages/WEB-INF/web.xml`.

Dort befinden sich die anwendungsspezifischen Einstellungen, welche Aktionen
welche Berechtigungen erfordern. Am Ende wird dabei mit folgender Zeile

<realm-name>justdoit</realm-name>
`<realm-name>justdoit</realm-name>`

das Realm zugewiesen. Realm ist dabei nur ein schöner Begriff für eine
beliebige Datenbank mit Benutzern und ihren Passwörtern und Berechtigungen.
beliebige Datenbank mit Benutzern, ihren Passwörtern und Berechtigungen.

Im TomEE geschieht dies durch folgende Zeilen in der Konfigurationsdatei
conf/server.xml:
`conf/server.xml`:
Die Definition des Realms geschieht durch folgende Zeilen in der Datei
/Web Pages/META-INF/context.xml:
`/Web Pages/META-INF/context.xml`:

```
<Realm
className = "org.apache.catalina.realm.DataSourceRealm"

Expand All @@ -56,10 +55,12 @@ Die Definition des Realms geschieht durch folgende Zeilen in der Datei
algorithm = "SHA-256"
/>
</Realm>
```

Die unter dataSourceName genannte Datenbankverbindung muss dabei in der Datei
conf/tomee.xml wie folgt definiert werden:
Die unter `dataSourceName` genannte Datenbankverbindung muss dabei in der Datei
`conf/tomee.xml` wie folgt definiert werden:

```
<Resource id="Derby-Sample-Managed" type="javax.sql.DataSource">
JdbcDriver = org.apache.derby.jdbc.ClientDriver
JdbcUrl = jdbc:derby:https://localhost:1527/sample
Expand All @@ -75,6 +76,7 @@ conf/tomee.xml wie folgt definiert werden:
Password = app
JtaManaged = false
</Resource>
```

Das Beispiel geht dabei von der Derby-Beispieldatenbank aus, die Bestandteil
von Netbeans ist.
Expand All @@ -83,20 +85,23 @@ von Netbeans ist.
Hinweise zum E-Mail-Versand
===========================

Der E-Mail-Versand wird mit der JavaMail API umgesetzt.
Ein Teil der benötigten Einstellungen wird in einer JSON Datei gespeichert (src/main/resources/mailConfig.json).
Der E-Mail-Versand wird mit der [JavaMail API](https://javaee.github.io/javamail/docs/api/) umgesetzt.
Ein Teil der benötigten Einstellungen wird in einer JSON Datei gespeichert:
`src/main/resources/mailConfig.json`

```
{
"from": "",
"host": "",
"port": "",
"username": "",
"password": ""
}
```

from: Adresse die als Absenderadresse angezeigt werden soll.
host: Adresse des Postausgangssevers (SMTP-Server)
port: Port des Postausgangsservers (SMTP-Server)
username: Benutzername des Kontos beim Mail-Provider
password: Passwort des Kontos beim Mail-Provider
`from`: Adresse die als Absenderadresse angezeigt werden soll.
`host`: Adresse des Postausgangssevers (SMTP-Server)
`port`: Port des Postausgangsservers (SMTP-Server)
`username`: Benutzername des Kontos beim Mail-Provider
`password`: Passwort des Kontos beim Mail-Provider

34 changes: 17 additions & 17 deletions src/main/webapp/WEB-INF/login/activate.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,29 @@
</jsp:attribute>

<jsp:attribute name="main">
<c:choose>
<c:when test="${!empty errors}">
<ul class="errors">
<c:forEach items="${errors}" var="error">
<li>${error}</li>
</c:forEach>
</ul>
</c:when>
<c:otherwise>
<div class="container">
<div class="card card-register mx-auto mt-5">
<div class="card-header">Aktivierung Erfolgreich</div>
<div class="card-body">
<div class="container">
<div class="card card-register mx-auto mt-5">
<div class="card-header">Aktivierung Erfolgreich</div>
<div class="card-body">
<c:choose>
<c:when test="${!empty errors}">
<ul class="errors">
<c:forEach items="${errors}" var="error">
<li>${error}</li>
</c:forEach>
</ul>
</c:when>
<c:otherwise>
<div class="text-center mb-4">
<h4>Ihr Account wurde erfolgreich aktiviert!</h4>
</div>
<div class="text-center">
<a class="d-block small mt-3" href="<c:url value="/view/dashboard/"/>">Zum Login</a>
</div>
</div>
</div>
</c:otherwise>
</c:choose>
</div>
</c:otherwise>
</c:choose>
</div>
</div>
</jsp:attribute>
</template:base>

0 comments on commit a88785d

Please sign in to comment.